#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)); } //选择A:A列,设置宽度为自动适应 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)); }