您的位置:首页 > 编程语言 > C语言/C++

vc++ 操作excel

2015-10-21 21:45 302 查看
1、首先项目中添加类”Typelib中的MFC类->选择文件中”,选择office的安装路径中的excel.exe;

2、选中以下几项_Application,_WorkSheet,_WorkBook,WorkSheets,WorkBooks,Range,然后导入;

3、导入后自动在工程中添加CApplication,CWorkSheet,CWorkBook,CWorkSheets,CWorkBooks,CRange这些类; 并将把这些类的头文件中的第一句话 #import “…….EXCEL.EXE” nonamespace 删除;

4、编译时会遇到问题Not enough actual parameters for macro ‘DialogBoxW’.

解决的方法:在CRange类中找到VARIANT DialogBox(){}并将DialogBox其改成_DialogBoxW

大致操作流程

定义变量

CApplication objApp;

CWorkbooks objBooks;

CWorkbook objBook;

CWorksheets objSheets;

CWorksheet objSheet;

CRange objRange,usedRange;

LPDISPATCH lpDisp;

COleVariant vResult;

CString temppath= _T(“e:\excel.xlsx”);

COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);

1、初始化COM组件

if(::CoInitialize(NULL)==E_INVALIDARG)

{

AfxMessageBox(L”初始化Com失败!”);

return ;

}

if(!objApp.CreateDispatch(L”Excel.Application”))

{

AfxMessageBox(L”无法启动服务器!”);

::CoUninitialize();//主要做Com相关资源的释放,清理工作.

return ;

}

2、得到得到工作簿容器

objBooks.AttachDispatch(objApp.get_Workbooks());

3、打开工作簿

lpDisp=objBooks.Open(strBookPath,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing);

objBook.AttachDispatch(lpDisp);

4、获得sheet容器

objSheets.AttachDispatch(objBook.get_Sheets());

5、在写入数据之前要根据需要对单元格做一定的处理,比如合并单元格、设置单元格格式、设置列宽和高;

objRange.AttachDispatch(objSheet.get_Range(_variant_t(“A1”),_variant_t(BTT1)),TRUE);

objRange.Merge(_variant_t((long)0));//合并单元格

objRange.AttachDispatch(objSheet.get_Range(_variant_t(“A1”),_variant_t(“A1”)),TRUE);

objRange.put_ColumnWidth(_variant_t((long)22));//设置列宽

objRange.AttachDispatch(objSheet.get_Rows());

objRange.put_RowHeight(_variant_t((long)22));//设置行高

6、写入数据

objRange.AttachDispatch(objSheet.get_Cells(),TRUE);

objRange.put_Item(_variant_t((long)1),_variant_t((long)1),_variant_t(_T(“数学系研究生课程统计”))); objRange.put_Item(_variant_t((long)2),_variant_t((long)1),_variant_t(_T(“课程名”))); objRange.put_Item(_variant_t((long)2),_variant_t((long)2),_variant_t(_T(“课时”)));

7、根据需要设置表的格式

/设置表格文本对齐方式/

objRange.AttachDispatch(objSheet.get_UsedRange());//加载已使用单元格

objRange.put_WrapText(_variant_t((long)1));//设置单元格自动换行

///水平对齐:默认=1,居中=-4108,左=-4131,右=-4152/

///* 垂直对齐:默认=2,居中=-4108,左=-4160,右=-4107*/

objRange.put_VerticalAlignment(_variant_t((long)-4108));

objRange.put_HorizontalAlignment(_variant_t((long)-4108));

///设置第一行表头字体和加粗/

objRange.AttachDispatch(objSheet.get_Range(_variant_t(“A1”),_variant_t(“A1”)));

objRange.put_RowHeight(_variant_t((long)20));

8、保存文件

CString strSaveAsName = _string_file_path;

book.SaveAs(_variant_t(strSaveAsName),vtMissing, vtMissing, vtMissing, vtMissing,

vtMissing, 0, vtMissing, vtMissing, vtMissing,

vtMissing, vtMissing);

9、释放资源

objRange.ReleaseDispatch();

objSheet.ReleaseDispatch();

objSheets.ReleaseDispatch();

objBook.ReleaseDispatch();

objBooks.ReleaseDispatch();

objApp.Quit();

objApp.ReleaseDispatch();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  VC++-MFC