You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

114 lines
3.4 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "StdAfx.h"
#include "ExcelMgr.h"
#include "MsgBox.h"
#include "LogMgr.h"
//一般安装完WPS2019 就可以使用
CExcelMgr::CExcelMgr(void)
{
}
CExcelMgr::~CExcelMgr(void)
{
m_bCreateOk = false;//是否成功创建了Excel 文件
}
bool CExcelMgr::CreatExcelFile()
{
/* COleVariant类为VARIANT数据类型的包装
在自动化程序中通常都使用ARIANT数据类型进行参数传递。
故下列程序中函数参数都是通过COleVariant类来转换了的。
*/
//covOptional 可选参数的VARIANT类型
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if(!m_app.CreateDispatch("Excel.Application") )
{
//有时候安装了WPS 这里还是会报错,可以忽略掉继续运行
CMsgBox MsgBox;
MsgBox.Show("无法创建Excellent应用,可能需要重新安装Excel");//
return false;
}
//获取工作薄集合
m_books=m_app.GetWorkbooks();
//添加一个工作薄
m_book=m_books.Add(covOptional);
//获取工作表集合
m_sheets=m_book.GetSheets();
//获取第一个工作表
m_sheet=m_sheets.GetItem(COleVariant((short)1));
m_bCreateOk = true;//是否成功创建了Excel 文件
return m_bCreateOk;
}
//显示Excel 表格
void CExcelMgr::ShowExcelFile()
{
if(!m_bCreateOk)
return;
//显示Excel表格并设置状态为用户可控制
m_app.SetVisible(TRUE);
m_app.SetUserControl(TRUE);
}
//获取单元格的索引(比如A1,D4等)
CString CExcelMgr::GetCellIdxStr(int Row,int Col)
{
Col -= 1;
CString IdxStr;
int num = 65;// A的Unicode码
CString colName = "";
do
{
if(colName.GetLength() > 0)
{
Col--;
}
int remainder = Col % 26;
colName = ((char) (remainder + num)) + colName;
Col = (int) ((Col - remainder) / 26);
} while (Col > 0);
IdxStr.Format(_T("%d"),Row);
IdxStr = colName+IdxStr;
//gLogMgr->WriteDebugLog(IdxStr);
return IdxStr;
}
//设置单元格的文本(第Row 行第Col 列)(bBold 是否粗体)
void CExcelMgr::SetCellTxt(int Row,int Col,CString txt,bool bBold)
{
if(!m_bCreateOk)
return;
Range range; //单元格区域对象
MyFont font;
Range cols;
//选择工作表中第Row行第Col列的单元格
CString IdxStr = GetCellIdxStr(Row,Col);
range=m_sheet.GetRange(COleVariant(IdxStr),COleVariant(IdxStr));
//设置A1="HELLO EXCEL"
range.SetValue2(COleVariant(txt)); //range.SetValue()必为range.SetValue2()
//调整格式,设置粗体
if(bBold)
{
font=range.GetFont();
font.SetBold(COleVariant((short)TRUE));
}
//选择AA列设置宽度为自动适应
cols=range.GetEntireColumn();
cols.AutoFit();
}
//插入一张图片(Row1,Col1,Row2,Col2 指定图片的显示范围)FilePath 是图片的文件路径
void CExcelMgr::InsertPicture(int Row1,int Col1,int Row2,int Col2,CString FilePath)
{
//从Sheet对象上获得一个Shapes
Range range; //单元格区域对象
Shapes shapes=m_sheet.GetShapes();
//获得Range对象用来插入图片
range=m_sheet.GetRange(COleVariant(GetCellIdxStr(Row1,Col1)),COleVariant(GetCellIdxStr(Row2,Col2)));//这里控制图片的尺寸
//从本地添加一个图片
shapes.AddPicture(FilePath,false,true,(float)range.GetLeft().dblVal,(float)range.GetTop().dblVal,(float)range.GetWidth().dblVal,(float)range.GetHeight().dblVal);
//设置宽高
ShapeRange sRange=shapes.GetRange(_variant_t(long(1)));
sRange.SetHeight(float(400));
sRange.SetWidth(float(550));
}