MFC读写Excel详细步骤
准备工作:
打开开发环境VC或VS新建一个基于对话框的简单工程; 通过类向导添加类-->类型库中的MFC类
打开创建类对话框
选择文件,位置编辑框填入Excel.exe的详细目录,可以通过浏览选择,在接口下方选择_Application(应用),_Workbook(视窗),Workbooks(整个视窗),Worksheets(单个表单),Worksheets(整个表单),Range(元素集合)六个基本的接口并生成类。选择接口后单击向右的单箭头即可,双箭头是生成所有接口的类; 生成类之后将添加的几个类的头文件中的
#import \注释掉,加上#include。
然后编译,出现下面这俩个错误;点击DialodBoxA找到错误位置将DialodBox改为_DialodBox;再编译,没有错误; warning C4003: “DialogBoxA”宏的实参不足 error C2059: 语法错误:“,”
在要操作Excel类的CPP文件中包含头文件:
准备工作完成。 向Excel写数据:
CFileDialogdlg(FALSE, \,NULL,
OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,\
Files(*.xls)|*.xls|Microsoft Excel Files(*.xlsx)(推荐)|*.xlsx|All Files (*.*)|*.*||\);
CRange range; CMyFont font; CRange cols;
COleVariantcovOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); if (!app.CreateDispatch(\)) { }
books=app.get_Workbooks(); book=books.Add(covOptional); sheets=book.get_Worksheets();
sheet=sheets.get_Item(COleVariant((short)1)); //获得(A,1)(B,1)两个单元格
range=sheet.get_Range(COleVariant(\),COleVariant(\)); //设置公式“=RAND()*100000”
range.put_Formula(COleVariant(\));
this->MessageBox(\无法创建Excel应用!\); return;
dlg.m_ofn.lpstrTitle =\保存到Excel\; if (dlg.DoModal() == IDOK) {
//获取路径
CStringstrFileName=dlg.GetPathName();
CWorkbooks books; CWorkbook book; CApplication app; CWorksheets sheets; CWorksheet sheet;
//选择整列,并设置宽度为自适应 cols = range.get_EntireColumn(); cols.AutoFit(); //设置字体为粗体
font = range.get_Font();
font.put_Bold(COleVariant((short)TRUE)); //设置数字格式为货币型
//range.put_NumberFormat(COleVariant(\ CString Range327[]={\,\,\,\,\,\};
CStringfileinfo[]={\齿形\,\齿向\,\齿距\,\左齿面\,\右齿面\,\径跳\}; for(int i=0;i<6;i++) { } /*
//获得坐标为(C,2)单元格 //显示Excel表
range = sheet.get_Range(COleVariant(\ //设置单元格内容位Hello Excel
range.put_Value2(COleVariant(\哈尔滨精达测量仪器有限公司\ */
//选择整列,并设置宽度为自适应 cols = range.get_EntireColumn(); cols.AutoFit();
range = sheet.get_Range(COleVariant(Range327[i]), range.put_Value2(COleVariant(fileinfo[i]));
COleVariant(Range327[i]));
//显示列表控件
range.ReleaseDispatch();
font.ReleaseDispatch(); cols.ReleaseDispatch(); sheet.ReleaseDispatch(); sheets.ReleaseDispatch(); book.ReleaseDispatch(); books.ReleaseDispatch();
//以下关闭应用的两条代码结合使用且顺序不能反,否则无法关闭进程 app.Quit();
app.ReleaseDispatch();
book.SaveCopyAs(COleVariant(strFileName)); book.put_Saved(true);
//app.put_Visible(TRUE);
//允许其他用户控制Excel,否则Excel、将一闪而过 //app.put_UserControl(TRUE);
}
读取Excel中的数据:
UpdateData(TRUE); str327=\;
UpdateData(FALSE); CApplication app; CWorkbooks books; CWorkbook book; CWorksheets sheets; CWorksheet sheet; CRange range; CRangeoCurCell;
CString strFileName1;
CFileDialogdlg(TRUE, \,NULL,
OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,\
Files(*.xls)|*.xls|Microsoft Excel Files(*.xlsx)|*.xlsx|All Files (*.*)|*.*||\);
dlg.m_ofn.lpstrTitle = \打开Excel文件\ ; intnRetVal = dlg.DoModal(); if ( nRetVal == IDOK ) {
if (!app.CreateDispatch( _T( \ ), NULL ) ) { }
//设置为显示
app.put_Visible(FALSE);
books.AttachDispatch(app.get_Workbooks(), TRUE ); LPDISPATCHlpDisp = NULL;
COleVariantcovTrue((short)TRUE); COleVariantcovFalse((short)FALSE);
COleVariantcovOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
// 打开文件
CStringstrFilePath=dlg.GetPathName(); strFileName1=strFilePath;
//CStringstrFilePath=\研发人员名单2016.xls\ lpDisp = books.Open( strFilePath,
_variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing),
::MessageBox( NULL, _T( \创建Excel服务失败!\ ), _T( \错误提示!\ ), MB_OK | return; //exit(1);
MB_ICONERROR);