接了个需求要求读写excel、wps的表格,以前都没弄过ole啥的,网上找了大佬们留下来的代码,调试修改,总算是基本满足要求了。
步骤:
1、已经安装excel。
2、选中工程,添加类->MFC ->Typelib中的MFC类 ->右下角添加 ->文件,选中excel.exe的路径(C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE)。
3、把_Application、_Workbook、_Worksheet、Workbooks、Worksheets、Range 到【生成的类】中。
4、打开生成的.h文件,把#import "C:\\Program Files\\Microsoft Office\\root\\Office16\\EXCEL.EXE" no_namespace注释掉。
5、将DialogBox()改成_DialogBox()。
然后把源文件IllusionExcelFile.h、IllusionExcelFile.cpp添加到工程中,编译就可以用了。
wps的et表格,操作基本是一模一样的。
问题:CloseExcelFile并不能保存原文件,没有找到问题的解决方法。
使用:
BOOL resultFlg = TRUE;
IllusionExcelFile myExcel;
//初始化OLE
resultFlg=myExcel.InitExcel();
//打开文件
char strFileName[255] = "C:/excel_test/test.xlsx";
resultFlg=myExcel.OpenExcelFile(strFileName);
if (!resultFlg)
{
AfxMessageBox("打开文件失败");
}
//获得sheet数量
int sheetCount = myExcel.GetSheetCount();
//load sheet
for (int iA = 1; iA < sheetCount; iA++) //下标从1开始
{
myExcel.LoadSheet(iA,TRUE);
}
//获取打开的sheet名称
CString strSheetName = myExcel.GetLoadSheetName();
//获取行、列总数
int rowCount = myExcel.GetRowCount();
int colunmCount = myExcel.GetColumnCount();
//检查数据类型
//resultFlg = myExcel.IsCellString(3,4);
//resultFlg = myExcel.IsCellInt(3, 4);
//获取表格数据
//CString strData = myExcel.GetCellString(1, 4);
//int intData = myExcel.GetCellInt(1, 3); //能够转换成数字,否则返回0
//double dulData = myExcel.GetCellDouble(1, 3);
CString dataC = myExcel.GetColumnName(3); //获取列名称,自己从A开始算
//合并单元表格
//myExcel.MergeRange(15, 1, 17, 3);//行+列 -> 行+列
//myExcel.MergeRange("H", 15, "J", 20);//行+列 -> 行+列
////写入数据
//myExcel.SetCellString(15,1,"AB001-.?8测试");
//另存为
myExcel.SaveasXSLFile("C:\\excel_test\\test01.xlsx");
//关闭文件
myExcel.CloseExcelFile(FALSE);//默认不保存文件,即使为TRUE也无法直接保存为原文件(没找到解决办法)
//释放OLE
myExcel.ReleaseExcel();
评论1
最新资源