VS2010 Excel开发环境配置
来源:互联网 发布:n2爆弹 知乎 编辑:程序博客网 时间:2024/05/19 15:24
前两天折腾一个小功能,需求是解析Excel中的数据出来。网上一般使用的方案:
1. ODBC当数据库来操作。
2. 使用第三方的类库
3. 使用COM调用Excel.exe中的接口。
第三方类库我怕MS升级版本后,是否仍然使用是个问号。使用ODBC的方案感觉很怪怪的,但据说不能修改删除什么的,不过我没有试验,还是放弃此种方案。我最终还是使用COM来做的,本来是没什么实现代码,都是COM实现好的,没什么可写的。难点在于VS2010的版本与MSDN上的说法严重不一致,折腾死人。MSDN上说的方案是VC6.0的实现方法。而且加入COM后与VS的SDK库冲突,无法编译。下面说说我的使用方法。
第一步:初化COM接口。在InitInstance中加入如下代码:
?[Copy to clipboard]View Code CPP
12345
if(!AfxOleInit()){AfxMessageBox(_T( "Cannot initialize COM dll" ));return FALSE;}
第二步:向工程添加Excel的C++操作类。具体步骤见下图:
1.Ctrl+Shift+X 打开类向导。
2.添加“类型库中MFC类”。此处操作与VC6.0有很大的不一样,让我找了半天,如下图:
3.添加需要的类文件。如下图:
4.将刚才导入的类头文件,加到模块中。
?[Copy to clipboard]View Code CPP
123456
#include "CApplication.h"#include "CWorkbooks.h"#include "CWorksheets.h"#include "CWorkbook.h"#include "CWorksheet.h"#include "CRange.h"
到此好像一切都结束了,下面就是写调用上面载入的代码了。But……,当你编译时。MS将给你如下惊喜:
我也不知道为什么造成这种结果,可能是由于这类接口是MS在N年前就弄好,后来VS升级了,相关接口也就年久失修了。造成我们这帮使用老技术的人的尴尬,后来求助于万能的Google大侠,得到如下方案:
将刚才导入的几个头文件中的:
?[Copy to clipboard]Download download.txt
1
#import "D:\\Program Files\\Microsoft Office\\Office12\\EXCEL.EXE" no_namespace
替换成:
?[Copy to clipboard]Download download.txt
123456789101112131415161718192021222324252627282930313233
#pragma region Import the type libraries #import "libid:2DF8D04C-5BFA-101B-BDE5-00AA0044DE52" \rename("RGB", "MSORGB") \rename("DocumentProperties", "MSODocumentProperties")// [-or-]//#import "C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE12\\MSO.DLL" \//rename("RGB", "MSORGB") \//rename("DocumentProperties", "MSODocumentProperties") using namespace Office; #import "libid:0002E157-0000-0000-C000-000000000046"// [-or-]//#import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB" using namespace VBIDE; #import "libid:00020813-0000-0000-C000-000000000046" \rename("DialogBox", "ExcelDialogBox") \rename("RGB", "ExcelRGB") \rename("CopyFile", "ExcelCopyFile") \rename("ReplaceText", "ExcelReplaceText") \no_auto_exclude// [-or-]//#import "C:\\Program Files\\Microsoft Office\\Office12\\EXCEL.EXE" \//rename("DialogBox", "ExcelDialogBox") \//rename("RGB", "ExcelRGB") \//rename("CopyFile", "ExcelCopyFile") \//rename("ReplaceText", "ExcelReplaceText") \//no_auto_exclude #pragma endregion
到此搞定环境问题,下面就根据需求对Excel进行操作吧。
有图有真像:
- VS2010 Excel开发环境配置
- VS2010 配置驱动开发环境
- Vs2010 配置驱动开发环境
- Vs2010 配置驱动开发环境
- VS2010 配置DirectShow开发环境
- VS2010配置驱动开发环境
- Vs2010 配置驱动开发环境
- vs2010配置Qt开发环境
- vs2010配置openGL开发环境
- VS2010 配置OpenCV开发环境
- VS2010内核开发环境配置
- vs2010配置openGL开发环境
- OpenGL + vs2010开发环境配置
- 英文版VS2010驱动开发环境配置
- VS2010 WDK 7.0配置驱动开发环境
- VS2010+WDK7.60 配置驱动开发环境
- VS2010+Win7配置OpenGL开发环境
- VS2010配置DirectX开发环境的方法
- w3cschool菜鸟教程离线版chm手册正式发布
- 手机某些时候无法接打电话的解决方法
- uva 10020 - Minimal coverage
- C语言union关键字
- uva 1509 - Leet
- VS2010 Excel开发环境配置
- ExecutorService的execute和submit方法
- SVNKit可运行实例说明与下载
- spring基础包的引入
- 在hadoop启动的时候,会出现各种各样的问题
- 我们工作到底为了什么
- 树状数组
- OLE操作Excel编译错误处理
- linux rsync同步备份
1>d:\xls\xls\debug\excel.tlh(74974): error C4430: 缺少类型说明符 – 假定为 int。注意: C++ 不支持默认 int
1>d:\xls\xls\debug\excel.tlh(74974): warning C4183: “GetMailEnvelope”: 缺少返回类型;假定为返回“int”的成员函数
1>d:\xls\xls\debug\excel.tlh(75683): error C2146: 语法错误: 缺少“;”(在标识符“HTMLProject”的前面)
1>d:\xls\xls\debug\excel.tlh(75683): error C4430: 缺少类型说明符 – 假定为 int。注意: C++ 不支持默认 int
1>d:\xls\xls\debug\excel.tlh(75683): error C4430: 缺少类型说明符 – 假定为 int。注意: C++ 不支持默认 int
1>d:\xls\xls\debug\excel.tlh(75693): error C2146: 语法错误: 缺少“;”(在标识符“CommandBars”的前面)
1>d:\xls\xls\debug\excel.tlh(75693): error C4430: 缺少类型说明符 – 假定为 int。注意: C++ 不支持默认 int
1>d:\xls\xls\debug\excel.tlh(75693): error C4430: 缺少类型说明符 – 假定为 int。注意: C++ 不支持默认 int
1>d:\xls\xls\debug\excel.tlh(75737): error C2146: 语法错误: 缺少“;”(在标识符“VBProject”的前面)
1>d:\xls\xls\debug\excel.tlh(75737): error C4430: 缺少类型说明符 – 假定为 int。注意: C++ 不支持默认 int
1>d:\xls\xls\debug\excel.tlh(75737): error C4430: 缺少类型说明符 – 假定为 int。注意: C++ 不支持默认 int
1>d:\xls\xls\debug\excel.tlh(75739): error C2146: 语法错误: 缺少“;”(在标识符“Permission”的前面)
1>d:\xls\xls\debug\excel.tlh(75739): error C4430: 缺少类型说明符 – 假定为 int。注意: C++ 不支持默认 int
1>d:\xls\xls\debug\excel.tlh(75739): error C4430: 缺少类型说明符 – 假定为 int。注意: C++ 不支持默认 int
1>d:\xls\xls\debug\excel.tlh(75741): error C2146: 语法错误: 缺少“;”(在标识符“SharedWorkspace”的前面)
1>d:\xls\xls\debug\excel.tlh(75741): error C4430: 缺少类型说明符 – 假定为 int。注意: C++ 不支持默认 int
1>d:\xls\xls\debug\excel.tlh(75741): error C4430: 缺少类型说明符 – 假定为 int。注意: C++ 不支持默认 int
1>d:\xls\xls\debug\excel.tlh(75743): error C2146: 语法错误: 缺少“;”(在标识符“Sync”的前面)
1>d:\xls\xls\debug\excel.tlh(75743): error C4430: 缺少类型说明符 – 假定为 int。注意: C++ 不支持默认 int
1>d:\xls\xls\debug\excel.tlh(75743): error C4430: 缺少类型说明符 – 假定为 int。注意: C++ 不支持默认 int
1>d:\xls\xls\debug\excel.tlh(75757): error C2146: 语法错误: 缺少“;”(在标识符“SmartDocument”的前面)
1>d:\xls\xls\debug\excel.tlh(75757): error C4430: 缺少类型说明符 – 假定为 int。注意: C++ 不支持默认 int
1>d:\xls\xls\debug\excel.tlh(75757): error C4430: 缺少类型说明符 – 假定为 int。注意: C++ 不支持默认 int
1>d:\xls\xls\debug\excel.tlh(75759): error C2146: 语法错误: 缺少“;”(在标识符“DocumentLibraryVersions”的前面)
1>d:\xls\xls\debug\excel.tlh(75759): fatal error C1003: 错误计数超过 100;正在停止编译
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========