MFC - Excel操作简介(基于VS2010)
2019-01-03 09:55:25来源:博客园 阅读 ()
一、添加与 Excel 操作相关的头文件
项目 -> 类向导,在右上方有一个下拉栏,选择其中的 类型库中的MFC类(T),即可看到下图所示界面,选择“文件”选项,然后在下方的位置选项中添加本地文件,本人电脑中的EXCEL是安装在 C 盘的,故文件目录为:C:\Program Files\Microsoft Office\Office14\EXCEL.EXE。
添加了 EXCEL.EXE 后,可以看到一系列接口,选择其中的: _Application、_Workbook、_Worksheet、Workbooks、Worksheets、Font、Range 并添加,然后在主程序中添加其头文件:
#include "CApplication.h" #include "CWorkbook.h" #include "CWorkbooks.h" #include "CWorksheet.h" #include "CWorksheets.h" #include "CRange.h" #include "CFont0.h"
逐次打开上述头文件,并将其中的 “ #import "C:\\Program Files\\Microsoft Office\\Office14\\EXCEL.EXE" no_namespace ” 这句话给屏蔽掉,不然会报错,无法编译成功。这样之后,编译还是不能通过,会出现以下报错:
点击 warning 来到报错处,在 DialogBox() 前面加上下划线 "_",即 "_DialogBox()" 即可。
二、创建并保存一个 Excel
直接上代码先:
void CExcel_ExampleDlg::SaveDataToExcel() { CString cellNum; CApplication m_ExcelApp; // Excel 应用程序接口 CWorkbook m_ExcelBook; // 工作簿 CWorkbooks m_ExcelBooks; // 工作簿集合 CWorksheet m_ExcelSheet; // 工作表 CWorksheets m_ExcelSheets; // 工作表集合 CRange m_ExcelRange; // 用于对单元格进行操作 CRange m_ExcelCols; CFont0 m_ExcelFont; // 用于字体操作 // 获取系统时间并保存为 CString 类型 CString timeStr; // 获取系统时间 SYSTEMTIME sysTime; GetLocalTime(&sysTime); CString m_saveFilePath; // 保存路径 timeStr.Format(L"_%4d.%2d.%2d_%2d.%2d",sysTime.wYear , sysTime.wMonth , sysTime.wDay , sysTime.wHour , sysTime.wMinute); m_saveFilePath = _T("E:\\Workplace\\ExcelExample") + timeStr + _T(".xlsx"); CString str; for(int i = 0;i <20;i++) { str.Format(L"%d",i); ValueArray1.Add(str); str.Format(L"%d",2 * i); ValueArray2.Add(str); str.Format(L"%d",3 * i); SumArray.Add(str); } COleVariant covTrue((short)TRUE); COleVariant covFalse((short)FALSE); COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); if(!m_ExcelApp.CreateDispatch(_T("Excel.Application"))) { AfxMessageBox(_T("创建Excel失败"),MB_OK | MB_ICONWARNING); return; } m_ExcelBooks = m_ExcelApp.get_Workbooks(); // 获取一个工作簿集合 m_ExcelBook = m_ExcelBooks.Add(covOptional); // 添加一个工作簿 m_ExcelSheets = m_ExcelBook.get_Sheets(); // 获取一个工作表集合 m_ExcelSheet = m_ExcelSheets.get_Item(COleVariant((short)1)); // 获取一个工作表 // 向 Excel 中添加数据 // 选择工作表中 A1-A1 单元格区域 m_ExcelRange = m_ExcelSheet.get_Range(COleVariant( _T("A1")), COleVariant(_T("A1"))); m_ExcelRange.put_Value2(COleVariant( _T("变量名1"))); // 设置 A1 内容 m_ExcelCols = m_ExcelRange.get_EntireColumn(); // 选择整列 m_ExcelCols.put_HorizontalAlignment(COleVariant((long)-4108)); // 设置居中对齐 // 选择工作表中 B1-B1 单元格区域 m_ExcelRange = m_ExcelSheet.get_Range(COleVariant( _T("B1")), COleVariant(_T("B1"))); m_ExcelRange.put_Value2(COleVariant( _T("值"))); // 设置 B1 内容 m_ExcelCols = m_ExcelRange.get_EntireColumn(); // 选择整列 m_ExcelCols.put_HorizontalAlignment(COleVariant((long)-4108)); // 设置居中对齐 // 选择工作表中 C1-C1 单元格区域 m_ExcelRange = m_ExcelSheet.get_Range(COleVariant( _T("C1")), COleVariant(_T("C1"))); m_ExcelRange.put_Value2(COleVariant( _T("变量名2"))); // 设置 C1 内容 m_ExcelCols = m_ExcelRange.get_EntireColumn(); // 选择整列 m_ExcelCols.put_HorizontalAlignment(COleVariant((long)-4108)); // 设置居中对齐 // 选择工作表中 D1-D1 单元格区域 m_ExcelRange = m_ExcelSheet.get_Range(COleVariant( _T("D1")), COleVariant(_T("D1"))); m_ExcelRange.put_Value2(COleVariant( _T("值"))); // 设置 D1 内容 m_ExcelCols = m_ExcelRange.get_EntireColumn(); // 选择整列 m_ExcelCols.put_HorizontalAlignment(COleVariant((long)-4108)); // 设置居中对齐 // 选择工作表中 E1-E1 单元格区域 m_ExcelRange = m_ExcelSheet.get_Range(COleVariant( _T("E1")), COleVariant(_T("E1"))); m_ExcelRange.put_Value2(COleVariant( _T("和"))); // 设置 E1 内容 m_ExcelCols = m_ExcelRange.get_EntireColumn(); // 选择整列 m_ExcelCols.put_HorizontalAlignment(COleVariant((long)-4108)); // 设置居中对齐 for(int i = 0;i < 20;i++) { cellNum.Format(L"%d",i+2); cellNum = _T("A") + cellNum; // 依次选择工作表中 A 列 的单元格 m_ExcelRange = m_ExcelSheet.get_Range(COleVariant(cellNum), COleVariant(cellNum)); m_ExcelRange.put_Value2(COleVariant(_T("a"))); // 设置 A 列内容 cellNum.Format(L"%d",i+2); cellNum = _T("B") + cellNum; // 依次选择工作表中 B 列 的单元格 m_ExcelRange = m_ExcelSheet.get_Range(COleVariant(cellNum), COleVariant(cellNum)); m_ExcelRange.put_Value2(COleVariant(ValueArray1[i])); // 设置 B 列内容 cellNum.Format(L"%d",i+2); cellNum = _T("C") + cellNum; // 依次选择工作表中 C 列 的单元格 m_ExcelRange = m_ExcelSheet.get_Range(COleVariant(cellNum), COleVariant(cellNum)); m_ExcelRange.put_Value2(COleVariant(_T("b"))); // 设置 C 列内容 cellNum.Format(L"%d",i+2); cellNum = _T("D") + cellNum; // 依次选择工作表中 D 列 的单元格 m_ExcelRange = m_ExcelSheet.get_Range(COleVariant(cellNum), COleVariant(cellNum)); m_ExcelRange.put_Value2(COleVariant(ValueArray2[i])); // 设置 D 列内容 cellNum.Format(L"%d",i+2); cellNum = _T("E") + cellNum; // 依次选择工作表中 E 列 的单元格 m_ExcelRange = m_ExcelSheet.get_Range(COleVariant(cellNum), COleVariant(cellNum)); m_ExcelRange.put_Value2(COleVariant(SumArray[i])); // 设置 E 列内容 } m_ExcelApp.put_Visible(FALSE); // 不显示 Excel 表格 m_ExcelApp.put_UserControl(FALSE); // 设置表格状态为用户不可控制 m_ExcelBook.SaveCopyAs(COleVariant(m_saveFilePath)); // 保存Excel表格 m_ExcelBook.put_Saved(TRUE); // 释放对象 m_ExcelBooks.ReleaseDispatch(); m_ExcelBook.ReleaseDispatch(); m_ExcelSheets.ReleaseDispatch(); m_ExcelSheet.ReleaseDispatch(); m_ExcelRange.ReleaseDispatch(); m_ExcelApp.Quit(); // 退出 Excel 程序,注意这里要先退出,后释放 m_ExcelApp.ReleaseDispatch(); }
这段代码创建了一个 Excel ,然后向 Excel 中添加了 5 列 21 行的数据并保存到本地,最终所得到的 Excel 如下:
整个代码不复杂,设置好一切后向 Excel 中添加数据即可,添加完数据后,记得保存表格,并释放相应的资源,否则程序结束后会有一个 Excel 进程驻留在内存中,这样重复运行程序时会出错。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- QTableView与Excel之间的文件打开与保存 2020-05-26
- C++和C#的对比 2020-05-17
- 第七章 1.输入输出与模板 2020-04-04
- 数据结构-线性表 2020-03-28
- 二叉树(1)二叉树基本操作通用接口 2020-02-06
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash