使用VC来操作Excel表格的源码

下面的代码段是关于使用VC来操作Excel表格的的代码,应该对小伙伴们也有用。

if (CoInitialize(NULL) != 0)
{
AfxMessageBox(“初始化COM支持库失败!”);
exit(1);
}

假如这个条件不通过就不能运行起程序。在程序的出口处CXXXApp::ExitInstance()函数return语句之前加入下面这句话:CoUninitialize();来释放COM支持库。这样对COM支持库的代码已经完成。下面要从Office的安装目录中找到对VC操作excel文件的动态库,在某些版本下这个文件是Excel8.olb或者Excel9.olb,在我的版本中是excel.exe这个exe也是动态库的形式,是微软公司主要的文件结果之一。选择vc的View菜单里面的ClassWizad命令,会弹出一个对话框;然后点击AddClass…按钮选择Fromatypelibrary,会弹出一个打开对话框,从这里打开Office安装目录下…/Office11/EXCEL.EXE文件,从里面选择几个要用到的类:_Application,Workbooks,_Wrokbook,Worksheets,_WorkSheet,Range,点击OK按钮。会在程序中生成一个excel.h和excel.cpp文件,这些文件中包含了刚才我们选择的几个类的代码。下面介绍一下这几个类:在vc操纵excel的exe动态库里面有好多个对象模型,就是刚才在创建过程中看到的那个列表,但是经常用到的有这么几个:_Application,Workbooks,_Wrokbook,Worksheets,_WorkSheet,Range,Charts和_Chart,最后面的两个是用来操作图表的,我没有用到所以这里也就不记录了。_Application:这里的Application就是Excel本身,众所周知,一个Excel可以包含多个工作簿,每个工作簿又可以包含多个工作表,而每个工作表又可以包含多个区域或者图表,所以这里他们是树型的结构关系,而application最基本的一个功能就是找到它的子项工作簿。果然,我们在引入我们程序的Application类中看到了这样的成员函数:GetWorkbooks()。既然application就是excel,那么打开程序,退出程序,显示/隐藏程序这些基本的操作都可以在这个类的成员函数中找到,果不其然。Workbooks:这个对象是一个容器对象,它里面存放着所有打开的工作簿。因此,我们可以猜测它一定有添加,查找,打开/关闭工作簿的功能。(本程序中使用excel的一个xlt模板来生成一个xls文件就是使用了这个容器对象的添加功能。)_Workbook:这是一个工作簿,也就相当于一个xls文件。Excel可以同时打开多个工作簿,所以工

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【前言】 工作或学习中可能需要实现基于VC读\写Excel文件的功能,本人最近也遇到了该问题。中间虽经波折,但是最终还是找到了解决问题的办法。 在此跟大家分享,希望对跟我同样迷茫过的同学们有所帮助。 1、程序功能 1)打开一个excel文件; 2)显示到CListCtrl上; 3)新建一个Excel文件。 以上均在对话框中实现。 2、平台 VC++2010 3、实现方法 常用的Excel打开方式有两种 1)通过数据库打开; 2)OLE方式打开。 由于方式1)操作繁琐,经常出现莫名的错误,这里选用方式2). 4、准备步骤 首先新建一个Dialog窗体程序,添加list control和两个按钮 1)将ExcelLib文件夹拷贝到程序目录下; 2)将Export2Excel.h,Export2Excel.cpp两个文件添加到项目; 3)包含头文件,#include "ExcelLib/Export2Excel.h" 通过以上步骤在程序中引入了可以读取Excle文件的CExport2Excel类; 5、打开excel文件 通过按钮点击打开 void CExcelTestDlg::OnBnClickedButtonOpenExcel() { //获取文件路径 CFileDialog* lpszOpenFile; CString szGetName; lpszOpenFile = new CFileDialog(TRUE,"","",OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,"Excel File(*.xlsx;*.xls)|*.xls;*.xlsx",NULL); if (lpszOpenFile->DoModal()==IDOK) { szGetName = lpszOpenFile->GetPathName(); SetWindowText(szGetName); delete lpszOpenFile; } else return; //打开文件 //文件中包含多个sheet时,默认打开第一个sheet CExport2Excel Excel_example; Excel_example.OpenExcel(szGetName); //获取sheet个数 int iSheetNum = Excel_example.GetSheetsNumber(); //获取已使用表格行列数 int iRows = Excel_example.GetRowCount(); int iCols = Excel_example.GetColCount(); //获取单元格的内容 CString cs_temp = Excel_example.GetText(1,1); //AfxMessageBox(cs_temp); //List control上显示 //获取工作表列名(第一行) CStringArray m_HeadName; m_HeadName.Add(_T("ID")); for (int i=1;iGetItemCount()>0) { m_list.DeleteColumn(0); } //初始化ClistCtrl,加入列名 InitList(m_list,m_HeadName); //填入内容 //第一行是标题,所以从第2行开始 CString num; int pos; for (int row = 2;row<=iRows; row++) { pos = m_list.GetItemCount(); num.Format(_T("%d"),pos +1); m_list.InsertItem(pos,num); for (int colum=1;columDoModal()==IDOK) { szGetName = lpszOpenFile->GetPathName(); SetWindowText(szGetName); delete lpszOpenFile; } else return; //文件全名称 CString csFileName = szGetName; //需要添加的两个sheet的名称 CString csSheetName = "newSheet"; CString csSheetName2 = "newSheet2"; // 新建一个excel文件,自己写入文字 CExport2Excel Excel_example; //新建excel文件 Excel_example.CreateExcel(csFileName); //添加sheet,新加的sheet在前,也就是序号为1 Excel_example.CreateSheet(csSheetName); Excel_example.CreateSheet(csSheetName2); //操作最开始添加的sheet:(newSheet) Excel_example.SetSheet(2); //添加表头 Excel_example.WriteHeader(1,"第一列"); Excel_example.WriteHeader(2,"第二列"); //添加核心数据 Excel_example.WriteData(1,1,"数据1"); Excel_example.WriteData(1,2,"数据2"); //保存文件 Excel_example.Save(); //关闭文件 Excel_example.Close(); } 7、注意事项 1)一般单个Excel文件包含多个sheet,程序默认打开第一个; 2)指定操作sheet,使用Excel_example.SetSheet(2)函数; 3)打开文件时最左侧的sheet序号为1,新建excel时最新添加的sheet序号为1. 【后记】 本程序主要基于网络CSDN中---“Excel封装库V2.0”---完成,下载地址是:http://download.csdn.net/detail/yeah2000/3576494,在此表示感谢!同时, 1)在其基础上作了小改动,改正了几个小错误,添加了几个小接口; 2)添加了如何使用例子,原程序是没有的; 3)详细的注释 发现不足之处,还请大家多多指教!
1. 单元格合并(类似MS EXCEL,增强:合并单元格包含的行列可以移动)。(Cells merged,unmerged) 2. 边框属性(类似MS EXCEL,增强:线宽可任意)。(Cell border line style) 3. 斜线功能(一个单元格内可以含有两条斜线,符合中国人的习惯)。 4. 单元格文字属性(上下左右居中对齐,多行文字,字体颜色,背景色)。(Cell text property, alignment) 5. 公式运算(包含Delphi Script 解释器“Delphin”,可以执行Delphi 代码,显示 Delphi 的窗体文件DFM)。(Delphi interpreter) 6. 行列极大(资源允许范围)。(MaxRowCount = 0xFFFF, MaxColCount=0xFFFF) 7. 修改“Delphin”解释器,使之能够识别对单元格的引用。(Ref cell name in delphin) 8. 对单元格之间循环引用的检查。(cell loop reference check) 9. 自动调整行高、列宽。(AutoSizeRows, AutoSizeCols) 10. 插入、删除、增加行列。(InsertRow, InsertCol) 11. 隐藏、取消隐藏行列(Hide, Unhide Cols, Rows) 12. 打印预览。(Print Preivew) 13. 背景图像。(Background Image)(支持bmp,gif,jpg,pcx,tif…) 14. 单元格数字格式、时间格式等等(类似 Excel) 15. 单元格的计算公式或宏代码可以返回数组。 16. 单元格批注。(类似 Excel) 17. 单元格内的文字可以自动换行。 18. 当有多页打印时,可以选择先行后列或者先列后行的打印方式。 19. 页边距设置。 20. 打印页面居中功能。 21. 编辑状态按比例缩放。 22. 单元格内嵌控件(列表框,组合框,日期选择控件,……),目前支持与TdateTimePicker 的互动,计划支持更多控件,计划加入控件属性编辑器,加入控件事件宏功能(2000/12/13) 23. 单元格绝对引用和相对引用的区分,A1,$A1,$A$1(2000/12/13) 24. 拷贝单元格时,自动调整相对引用的单元格。如:Cells[1,1] := ‘=B1’,拷贝到Cells[3,3],则Cells[3,3] := ‘=D3’(2000/12/13) 25. 单元格名称可以使用中文(2000/12/13) 26. 函数分类列表(2000/12/13) 27. 查找替换(2000/12/13) 28. 设计模式(不执行单元格内的公式,但是检查语法和循环引用,显示公式)(2000/12/13) 29. 运行模式(执行单元格内的公式,显示计算结果)(2000/12/13) 30. 增加表格宏功能(原来只有单元格宏功能)。(Macros 属性)(2001/1) 31. 增加带语法加亮功能的宏编辑器。(来自 mwEdit 控件)(2001/1) 32. 给 Delphin 解释器增加 const 常量定义。可以直接在单元格中调用在宏 Macros 中定义的常量和函数。(2001/1) 33. 增加 COUNTIF 、COUNTROWIFCOL 统计函数。(2001/1) 34. 固定行列,类似MS Excel 的标题栏功能。(2001/1/14)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值