Vc++中实现Excel数据导入和导出

  • 格式:docx
  • 大小:18.46 KB
  • 文档页数:3

下载文档原格式

  / 7
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

只是简单的把功能实现了,在导出大量数据的时候有明显的延迟,也只能先这样了,那有时间去优化啊,估计在使用了多线程等优化手段后速度会有大的改善。把这段代码放在自己的空间里,以后也许用的着。

1、先在对话框中加入一个按钮,ID IDC_BUTTON_EXCEL Caption导出Excel。双击该按钮,增加成员函数void CMPIClientView::OnExcel()。

2、在BOOL MPIClient::InitInstance()中,dlg.DoModal();之前增加代码:

if (CoInitialize(NULL)!=0)

{

AfxMessageBox("初始化COM支持库失败!");

exit(1);

}

在return FALSE;语句前,加入:

CoUninitialize();

3、点View菜单中的ClassWizard(或按CTRL+W),选择Automation标签,点Add Class 并选择"From a type library"浏览并选择你希望自动化的对象库(例如,如果你自动化Microsoft Excel 2000,选择位于C:/Program Files/Microsoft Office/Office/Excel9.olb的Microsoft Excel 9.0对象库。如果你自动化Microsoft Excel 2002和Microsoft Office Excel 2003 ,对象库内含在Excel.exe中,Office 2002的Excel.exe默认位于C:/program

Files/Microsoft Office/Office10/Excel.exe, Office 2003的Excel.exe默认位于C:/program

Files/Microsoft Office/Office11/Excel.exe。选择合适的对象库后,点Open,在类确认列表中选择所有类(一般要用到_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range几个基本的类),点OK。提示:类确认对话框中的列表框里包含了Microsoft Excel类型库中的所有IDispatch接口(与类中一致)。在对话框下面可以看到命名为Excel8.cpp的执行文件,该文件包含了从COleDispatchDriver派生的封装类,头文件是Excel8.h(对于Excel 2002和Excel 2003,文件名为Excel.cpp和Excel.h)。

4、在ExcelTestDlg.cpp文件的头部,增加:

#include "comdef.h"

#include "Excel9.h"(或Excel8.h,Excel.h)

5、在void CMPIClientView::OnExcel()函数中增加如下代码:

int n = 2;

CStringexeId;

CStringexeName;

CStringexeType;

COleVariant

covTrue((short)TRUE),

covFalse((short)FALSE),

covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

_Application ExcelApp;

Workbooks MPIBooks;

_Workbook MPIBook;

Worksheets MPISheets;

_Worksheet MPISheet;

Range MPIRange;

//创建Excel 2003服务器(启动Excel)

if (!ExcelApp.CreateDispatch("Excel.Application",NULL))

{

AfxMessageBox("Create Excel service failure!");

return;

}

ExcelApp.SetVisible(false);

//利用模板文件建立新文档

MPIBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);

MPIBook = MPIBooks.Add(covOptional);

//得到Worksheets

MPISheets.AttachDispatch(MPIBook.GetWorksheets(),true);

//得到sheet1

MPISheet.AttachDispatch(MPISheets.GetItem(_variant_t("sheet1")),true);

//得到全部Cells,此时,MPIRange是cells的集合

MPIRange.AttachDispatch(MPISheet.GetCells(),true);

MPIRange.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("工号")); MPIRange.SetItem(_variant_t((long)1),_variant_t((long)2),_variant_t("姓名")); MPIRange.SetItem(_variant_t((long)1),_variant_t((long)3),_variant_t("机型")); //设置列的宽度

MPIRange.SetColumnWidth(_variant_t((long)12));

while (n < i+2)

{

exeId = m_szDataList.GetItemText(n-2, 1);

exeName = m_szDataList.GetItemText(n-2, 2);

exeType = m_szDataList.GetItemText(n-2, 3);

MPIRange.SetItem(_variant_t((long)n),_variant_t((long)1),_variant_t(exeId));

MPIRange.SetItem(_variant_t((long)n),_variant_t((long)2),_variant_t(exeName)) ;

MPIRange.SetItem(_variant_t((long)n),_variant_t((long)3),_variant_t(exeType));

exeId = "";

exeName = "";

exeType = "";

n++;

}

ExcelApp.SetVisible(true);

ExcelApp.Quit();

MPIRange.ReleaseDispatch();

MPISheet.ReleaseDispatch();

MPISheets.ReleaseDispatch();

MPIBook.ReleaseDispatch();

MPIBooks.ReleaseDispatch();

ExcelApp.ReleaseDispatch();