C++之操作Excel(抄录https://www.cnblogs.com/For-her/p/3499782.html)
MFC操作Excel
下面的操作基于Excel2003
一.初始化操作
1.导入类库
点击查看->建立类向导-> Add Class...\From a type Library...-> C:\Program Files\Microsoft Office\Office\EXCEL.EXE,接下来就可以看到导入的类excel.h, excel.cpp。
2.初始化COM
找到App的InitInstance()函数,在其中添加 AfxOleInit()函数的调用,如:
- if (!AfxOleInit())
- {
- AfxMessageBox("注册COM出错!");
- return FALSE;
- }
二.Excel操作类
ExcelOperate.h
- #include "atlbase.h"
- #include "excel.h"
- using namespace myexcel;
- class CExcelOperate
- {
- private:
- myexcel::_Application m_ecApp;
- Workbooks m_ecBooks;
- _Workbook m_ecBook;
- Worksheets m_ecSheets;
- _Worksheet m_ecSheet;
- myexcel::Range m_ecRange;
- VARIANT ret;//保存单元格的值
- public:
- CExcelOperate();
- virtual ~CExcelOperate();
- public:
- //操作
- //**********************创建新EXCEL*******************************************
- BOOL CreateApp();
- BOOL CreateWorkbooks(); //创建一个新的EXCEL工作簿集合
- BOOL CreateWorkbook(); //创建一个新的EXCEL工作簿
- BOOL CreateWorksheets(); //创建一个新的EXCEL工作表集合
- BOOL CreateWorksheet(short index); //创建一个新的EXCEL工作表
- BOOL CreateSheet(short index);
- BOOL Create(short index = 1); //创建新的EXCEL应用程序并创建一个新工作簿和工作表
- void ShowApp(); //显示EXCEL文档
- void HideApp(); //隐藏EXCEL文档
- //**********************打开文档*********************************************
- BOOL OpenWorkbook(CString fileName, short index = 1);
- BOOL Open(CString fileName); //创建新的EXCEL应用程序并打开一个已经存在的文档。
- BOOL SetActiveWorkbook(short i); //设置当前激活的文档。
- //**********************保存文档*********************************************
- BOOL SaveWorkbook(); //Excel是以打开形式,保存。
- BOOL SaveWorkbookAs(CString fileName);//Excel以创建形式,保存。
- BOOL CloseWorkbook();
- void CloseApp();
- //**********************读信息********************************
- BOOL GetRangeAndValue(CString begin, CString end);//得到begin到end的Range并将之间的值设置到ret中
- void GetRowsAndCols(long &rows, long &cols);//得到ret的行,列数
- BOOL GetTheValue(int rows, int cols, CString &dest);//返回第rows,cols列的值,注意只返回文本类型的,到dest中
- BOOL SetTextFormat(CString &beginS, CString &endS);//将beginS到endS设置为文本格式(数字的还要用下面的方法再转一次)
- BOOL SetRowToTextFormat(CString &beginS, CString &endS);//将beginS到endS(包括数字类型)设置为文本格式
- };
ExcelOperate.cpp
- CExcelOperate::CExcelOperate()
- {
- }
- CExcelOperate::~CExcelOperate()
- {
- }
- BOOL CExcelOperate::CreateApp()
- {
- //if (FALSE == m_wdApp.CreateDispatch("Word.Application"))
- COleException pe;
- if (!m_ecApp.CreateDispatch(_T("Excel.Application"), &pe))
- {
- AfxMessageBox("Application创建失败,请确保安装了word 2000或以上版本!", MB_OK|MB_ICONWARNING);
- pe.ReportError();
- throw &pe;
- return FALSE;
- }
- return TRUE;
- }
- BOOL CExcelOperate::CreateWorkbooks() //创建一个新的EXCEL工作簿集合
- {
- if (FALSE == CreateApp())
- {
- return FALSE;
- }
- m_ecBooks = m_ecApp.GetWorkbooks();
- if (!m_ecBooks.m_lpDispatch)
- {
- AfxMessageBox("WorkBooks创建失败!", MB_OK|MB_ICONWARNING);
- return FALSE;
- }
- return TRUE;
- }
- BOOL CExcelOperate::CreateWorkbook() //创建一个新的EXCEL工作簿
- {
- if(!m_ecBooks.m_lpDispatch)
- {
- AfxMessageBox("WorkBooks为空!", MB_OK|MB_ICONWARNING);
- return FALSE;
- }
- COleVariant vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
- m_ecBook = m_ecBooks.Add(vOptional);
- if(!m_ecBook.m_lpDispatch)
- {
- AfxMessageBox("WorkBook为空!", MB_OK|MB_ICONWARNING);
- return FALSE;
- }
- /*
- //得到document变量
- m_wdDoc = m_wdApp.GetActiveDocument();
- if (!m_wdDoc.m_lpDispatch)
- {
- AfxMessageBox("Document获取失败!", MB_OK|MB_ICONWARNING);
- return FALSE;
- }
- //得到selection变量
- m_wdSel = m_wdApp.GetSelection();
- if (!m_wdSel.m_lpDispatch)
- {
- AfxMessageBox("Select获取失败!", MB_OK|MB_ICONWARNING);
- return FALSE;
- }
- //得到Range变量
- m_wdRange = m_wdDoc.Range(vOptional,vOptional);
- if(!m_wdRange.m_lpDispatch)
- {
- AfxMessageBox("Range获取失败!", MB_OK|MB_ICONWARNING);
- return FALSE;
- }
- */
- return TRUE;
- }
- BOOL CExcelOperate::CreateWorksheets() //创建一个新的EXCEL工作表集合
- {
- if(!m_ecBook.m_lpDispatch)
- {
- AfxMessageBox("WorkBook为空!", MB_OK|MB_ICONWARNING);
- return FALSE;
- }
- m_ecSheets = m_ecBook.GetSheets();
- if(!m_ecSheets.m_lpDispatch)
- {
- AfxMessageBox("WorkSheets为空!", MB_OK|MB_ICONWARNING);
- return FALSE;
- }
- return TRUE;
- }
- BOOL CExcelOperate::CreateWorksheet(short index) //创建一个新的EXCEL工作表
- {
- if(!m_ecSheets.m_lpDispatch)
- {
- AfxMessageBox("WorkSheets为空!", MB_OK|MB_ICONWARNING);
- return FALSE;
- }
- m_ecSheet = m_ecSheets.GetItem(COleVariant(index));
- if(!m_ecSheet.m_lpDispatch)
- {
- AfxMessageBox("WorkSheet为空!", MB_OK|MB_ICONWARNING);
- return FALSE;
- }
- return TRUE;
- }
- BOOL CExcelOperate::CreateSheet(short index)
- {
- if(CreateWorksheets() == FALSE)
- {
- return FALSE;
- }
- if(CreateWorksheet(index) == FALSE)
- {
- return FALSE;
- }
- return TRUE;
- }
- BOOL CExcelOperate::Create(short index) //创建新的EXCEL应用程序并创建一个新工作簿和工作表
- {
- if(CreateWorkbooks() == FALSE)
- {
- return FALSE;
- }
- if(CreateWorkbook() == FALSE)
- {
- return FALSE;
- }
- if(CreateSheet(index) == FALSE)
- {
- return FALSE;
- }
- return TRUE;
- }
- void CExcelOperate::ShowApp() //显示WORD文档
- {
- m_ecApp.SetVisible(TRUE);
- }
- void CExcelOperate::HideApp() //隐藏word文档
- {
- m_ecApp.SetVisible(FALSE);
- }
- //**********************打开文档*********************************************
- BOOL CExcelOperate::OpenWorkbook(CString fileName, short index)
- {
- if(!m_ecBooks.m_lpDispatch)
- {
- AfxMessageBox("WorkSheets为空!", MB_OK|MB_ICONWARNING);
- return FALSE;
- }
- //COleVariant vFileName(_T(fileName));
- COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
- m_ecBook = m_ecBooks.Open(fileName,VOptional, VOptional, VOptional, VOptional,VOptional, VOptional, VOptional, VOptional,VOptional, VOptional, VOptional, VOptional, VOptional, VOptional);
- if(!m_ecBook.m_lpDispatch)
- {
- AfxMessageBox("WorkSheet获取失败!", MB_OK|MB_ICONWARNING);
- return FALSE;
- }
- if(CreateSheet(index) == FALSE)
- {
- return FALSE;
- }
- return TRUE;
- }
- BOOL CExcelOperate::Open(CString fileName) //创建新的EXCEL应用程序并打开一个已经存在的文档。
- {
- if(CreateWorkbooks() == FALSE)
- {
- return FALSE;
- }
- return OpenWorkbook(fileName);
- }
- /*BOOL CExcelOperate::SetActiveWorkbook(short i) //设置当前激活的文档。
- {
- }*/
- //**********************保存文档*********************************************
- BOOL CExcelOperate::SaveWorkbook() //文档是以打开形式,保存。
- {
- if (!m_ecBook.m_lpDispatch)
- {
- AfxMessageBox("Book获取失败!", MB_OK|MB_ICONWARNING);
- return FALSE;
- }
- m_ecBook.Save();
- return TRUE;
- }
- BOOL CExcelOperate::SaveWorkbookAs(CString fileName)//文档以创建形式,保存。
- {
- if (!m_ecBook.m_lpDispatch)
- {
- AfxMessageBox("Book获取失败!", MB_OK|MB_ICONWARNING);
- return FALSE;
- }
- COleVariant vTrue((short)TRUE),
- vFalse((short)FALSE),
- vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
- COleVariant vFileName(_T(fileName));
- m_ecBook.SaveAs(
- vFileName, //VARIANT* FileName
- vOptional, //VARIANT* FileFormat
- vOptional, //VARIANT* LockComments
- vOptional, //VARIANT* Password
- vOptional, //VARIANT* AddToRecentFiles
- vOptional, //VARIANT* WritePassword
- 0, //VARIANT* ReadOnlyRecommended
- vOptional, //VARIANT* EmbedTrueTypeFonts
- vOptional, //VARIANT* SaveNativePictureFormat
- vOptional, //VARIANT* SaveFormsData
- vOptional, //VARIANT* SaveAsAOCELetter
- vOptional //VARIANT* ReadOnlyRecommended
- /* vOptional, //VARIANT* EmbedTrueTypeFonts
- vOptional, //VARIANT* SaveNativePictureFormat
- vOptional, //VARIANT* SaveFormsData
- vOptional //VARIANT* SaveAsAOCELetter*/
- );
- return TRUE;
- }
- BOOL CExcelOperate::CloseWorkbook()
- {
- COleVariant vTrue((short)TRUE),
- vFalse((short)FALSE),
- vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
- m_ecBook.Close(vFalse, // SaveChanges.
- vTrue, // OriginalFormat.
- vFalse // RouteDocument.
- );
- m_ecBook = m_ecApp.GetActiveWorkbook();
- if(!m_ecBook.m_lpDispatch)
- {
- AfxMessageBox("Book获取失败!", MB_OK|MB_ICONWARNING);
- return FALSE;
- }
- if(CreateSheet(1) == FALSE)
- {
- return FALSE;
- }
- return TRUE;
- }
- void CExcelOperate::CloseApp()
- {
- SaveWorkbook();
- COleVariant vTrue((short)TRUE),
- vFalse((short)FALSE),
- vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
- //m_ecDoc.Save();
- m_ecApp.Quit();
- if(m_ecRange.m_lpDispatch)
- m_ecRange.ReleaseDispatch();
- if(m_ecSheet.m_lpDispatch)
- m_ecSheet.ReleaseDispatch();
- if(m_ecSheets.m_lpDispatch)
- m_ecSheets.ReleaseDispatch();
- if(m_ecBook.m_lpDispatch)
- m_ecBook.ReleaseDispatch();
- if(m_ecBooks.m_lpDispatch)
- m_ecBooks.ReleaseDispatch();
- if(m_ecApp.m_lpDispatch)
- m_ecApp.ReleaseDispatch();
- }
- BOOL CExcelOperate::GetRangeAndValue(CString begin, CString end)
- {
- if(!m_ecSheet.m_lpDispatch)
- {
- AfxMessageBox("Sheet获取失败!", MB_OK|MB_ICONWARNING);
- return FALSE;
- }
- m_ecRange = m_ecSheet.GetRange(COleVariant(begin), COleVariant(end));
- if(!m_ecRange.m_lpDispatch)
- {
- AfxMessageBox("Range获取失败!", MB_OK|MB_ICONWARNING);
- return FALSE;
- }
- ret = m_ecRange.GetValue2();//得到表格中的值
- return TRUE;
- }
- void CExcelOperate::GetRowsAndCols(long &rows, long &cols)
- {
- COleSafeArray sa(ret);
- sa.GetUBound(1,&rows);
- sa.GetUBound(2,&cols);
- }
- //只返回CString类型的,其他类型概视为错误
- BOOL CExcelOperate::GetTheValue(int rows, int cols, CString &dest)
- {
- long rRows, rCols;
- long index[2];
- VARIANT val;
- COleSafeArray sa(ret);
- sa.GetUBound(1,&rRows);
- sa.GetUBound(2,&rCols);
- if(rows < 1 || cols < 1 || rRows < rows || rCols < cols)
- {
- AfxMessageBox("出错点1");
- return FALSE;
- }
- index[0]=rows;
- index[1]=cols;
- sa.GetElement(index,&val);
- if(val.vt != VT_BSTR)
- {
- CString str;
- str.Format("出错点2, %d",val.vt);
- AfxMessageBox(str);
- return FALSE;
- }
- dest = val.bstrVal;
- return TRUE;
- }
- //将beginS到endS之间设置为文本格式
- BOOL CExcelOperate::SetTextFormat(CString &beginS, CString &endS)
- {
- if(GetRangeAndValue(beginS, endS))
- {
- m_ecRange.Select();
- m_ecRange.SetNumberFormatLocal(COleVariant("@"));
- return TRUE;
- }
- return FALSE;
- }
- //将beginS到endS之间(必须是一列)设置为真正的文本格式
- BOOL CExcelOperate::SetRowToTextFormat(CString &beginS, CString &endS)
- {
- if(GetRangeAndValue(beginS, endS))
- {
- m_ecRange.Select();
- Range m_tempRange = m_ecSheet.GetRange(COleVariant(beginS), COleVariant(beginS));
- if(!m_tempRange.m_lpDispatch) return FALSE;
- COleVariant vTrue((short)TRUE),
- vFalse((short)FALSE);
- //int tempArray[2] = {1, 2};
- COleSafeArray saRet;
- DWORD numElements = {2};
- saRet.Create(VT_I4, 1, &numElements);
- long index = 0;
- int val = 1;
- saRet.PutElement(&index, &val);
- index++;
- val = 2;
- saRet.PutElement(&index, &val);
- //m_tempRange.GetItem(COleVariant((short)5),COleVariant("A"));
- m_ecRange.TextToColumns(m_tempRange.GetItem(COleVariant((short)1),COleVariant((short)1)), 1, 1, vFalse, vTrue, vFalse, vFalse, vFalse, vFalse, vFalse, saRet, vFalse, vFalse, vTrue);
- m_tempRange.ReleaseDispatch();
- return TRUE;
- }
- return FALSE;
- }
C++之操作Excel(抄录https://www.cnblogs.com/For-her/p/3499782.html)的更多相关文章
- HBASE学习d端口master:16010(java操作hbase)https://www.cnblogs.com/junrong624/p/7323483.html
HBase提示已创建表,但是list查询时,却显示表不存在. https://blog.csdn.net/liu16659/article/details/80216085 下载网址 http://a ...
- python操作excel表格(xlrd/xlwt)
最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而且不太能满足需求,不过经过一番对源码的"研究&q ...
- python3:操作excel文件
前提:自动化接口测试中,可以将用例放在excel中管理.结合实际情况讲解如何操作excel文件 1.安装xlrd:pip install xlrd 2.导入模块:import xlrd 3.打开Exc ...
- C#利用NPOI操作Excel文件
NPOI作为开源免费的组件,功能强大,可用来读写Excel(兼容xls和xlsx两种版本).Word.PPT文件.可是要让我们记住所有的操作,这便有点困难了,至此,总结一些在开发中常用的针对Excel ...
- .Net 操作Excel表格
一..从NuGet中,引用 Microsoft.Office.Interop.Excel类库. 方法一.先打开一个execl表然后进行保存 Application xApp = null; Workb ...
- 【转】python操作excel表格(xlrd/xlwt)
[转]python操作excel表格(xlrd/xlwt) 最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异, ...
- xlrd、xlwt 操作excel表格详解
转自:https://www.cnblogs.com/jiablogs/p/9141414.html python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是 ...
- 网页中动态嵌入PDF文件/在线预览PDF内容https://www.cnblogs.com/xgyy/p/6119459.html
#网页中动态嵌入PDF文件/在线预览PDF内容# 摘要:在web开发时我们有时会需要在线预览PDF内容,在线嵌入pdf文件: 问题1:如何网页中嵌入PDF: 在网页中: 常用的几种PDF预览代码片段如 ...
- POI操作Excel(xls、xlsx)
阿帕奇官网:http://poi.apache.org/ POI3.17下载:http://poi.apache.org/download.html#POI-3.17 POI操作Excel教程(易百教 ...
随机推荐
- Windows远程桌面没有密码的电脑
你如果想远程一个密码为空的机器,默认情况下是不可以的,需要进行以下设置 1.windows家庭版不支持远程桌面 2. 3.搜索“本地安全策略”
- 在 Linux 中安装 Lighttpd Web 服务器
Lighttpd 是一款开源 Web 服务器软件.Lighttpd 安全快速,符合行业标准,适配性强并且针对高配置环境进行了优化.相对于其它的 Web 服务器而言,Lighttpd 占用内存更少:因其 ...
- centos7 docker install
env: os :centos 7 vmware steps: 1.yum -y install docker after installed ,using docker version cmd ...
- Django学习笔记第三篇--关于响应返回
一.返回简单类型: #1.返回简单字符串 #from django.http import HttpResponse return HttpResponse("return string&q ...
- 探讨Java I/O类和接口
(输出)Output:程序---->数据源(如某个文件) (输入)Input:数据源---->程序 Java.io定义的I/O类如下表所示: BufferedInputStream Buf ...
- idea下maven项目增加依赖项目里面没有添加相关依赖jar
困扰了一晚上的问题,一般在pom.xml中增加了相关依赖,idea会自动将依赖的Jar包增加到maven项目中,但是在pom.xml中增加了依赖,项目中并没有 偶然打开idea的侧边栏maven工具栏 ...
- 原生封装的ajax
原生封装的ajax的代码如下: //将数据转换成 a=1&b=2格式; function json2url(json){ var arr = []; //加随机数防止缓存; json.t = ...
- WingIDE6.0神秘代码
python2: import string import random import sha BASE16 = '0123456789ABCDEF' BASE30 = '123456789ABCDE ...
- Python全栈day13(作业讲解字典嵌套实现用户输入地址信息添加及查看)
要求: 列出字典对应节点名称,根据用户输入可以添加节点,查看节点等功能,这里以地址省-市-县等作为列子,此题熟悉字典嵌套功能 vim day13-16.py db = {} path = [] whi ...
- IDEA安装Python环境,并加入Anaconda环境
为什么做这个事情? 1.首先,Anaconda中已经有各种科学计算环境,包括后面安装的tensorflow 2.通过IDEA中配置就达到了Scala.Python.Java同时运行的目的. Intel ...