vc开发Excel的一个问题

huaren801007 2007-12-10 04:41:30
最近看到vc6中的一个sdk sample,就是\com\comexcel\excel7中的例子,我现在的Office版本是office2003,不能正确运行.请问如何修改?
请注意我的条件:仅仅导入库xl5en32.olb;使用操作Excel97的办法来操作Excel2003;不知道有没有办法,请各位指教

我的大致代码如下:
#import "F:\Microsoft Office\Office11\xl5en32.olb" rename_namespace("XLDemo") rename("DialogBox","DialogBoxXL")
#include <stdio.h>
#include <tchar.h>
struct StartOle {
StartOle() {CoInitialize(NULL);}
~StartOle() {CoUninitialize();}
}_inst_StartOle;
void main()
{
using namespace XLDemo;
try {
ApplicationPtr pXL("Excel.Application");
pXL->Visible = VARIANT_TRUE;
WorkbooksPtr pWorkBooks = pXL->Workbooks();//发生运行时错误,没有找到相应的成员
//错误是还没有Workbooks代表的实例,尽管已经有Application,可是,怎么创建?
//我的问题是,有没有最小的改动,使得这段代码能够工作?
//
.............
}

}

在vs2005上的comexcel示例能够正常工作,可是在vc6平台上会发生编译错误,好像import的一个语法错误;利用mfc来导入xl5en32.olb的做法也没有成功,可是理论上来说,对excel com组件所做的改进应该对原来的代码影响最小才对,要不然岂不是很不兼容?
如有任何心得体会,衷心感谢!
...全文
196 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zipall 2007-12-12
  • 打赏
  • 举报
回复
惭愧!
这样也有分....
zipall 2007-12-11
  • 打赏
  • 举报
回复
不懂vc,你可以使用“无满意答案结贴”。
huaren801007 2007-12-11
  • 打赏
  • 举报
回复
结不了贴,请来一个人回复一下,我把分数给你,然后可结贴

csdn的规则,呵呵
huaren801007 2007-12-11
  • 打赏
  • 举报
回复
目前的实验发现,好像仅仅从xl5en32.olb没有办法实现对Excel的操作,不过comexcel示例在vc6平台上的编译成功了,可以运行的代码如下:
#pragma warning (disable:4192)
#import "C:\Program Files\Common Files\Microsoft Shared\OFFICE11\MSO.DLL" rename_namespace("Office2003")
using namespace Office2003;
#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB" rename_namespace("VBE6")
using namespace VBE6;
#import "F:\Microsoft Office\Office11\Excel.exe" rename("RGB","MSRGB") rename("DialogBox","DialogBoxXL") rename_namespace("MSExcel")
using namespace MSExcel;
#include <stdio.h>
#include <tchar.h>

struct StartOle {
StartOle() {CoInitialize(NULL);}
~StartOle() {CoUninitialize();}
}_inst_StartOle;

void main()
{
try {
_ApplicationPtr pXL;

/*IUnknown* pUnk = NULL;
GUID guid;

CLSIDFromProgID(L"Excel.Application",&guid);
CoCreateInstance(guid,NULL,CLSCTX_ALL | CLSCTX_REMOTE_SERVER,IID_IUnknown,(void**)&pUnk);
OleRun(pUnk);
pUnk->QueryInterface(__uuidof(ApplicationPtr),(void**)&pXL);
pUnk->Release();*/
pXL.CreateInstance(L"Excel.Application");
pXL->Visible[0] = VARIANT_TRUE;

WorkbooksPtr pBooks = pXL->Workbooks;
_WorkbookPtr pBook = pBooks->Add((long)xlWorksheet);
............
}
}

原来产生错误,是因为comexcel中的一行语句
#import "progid:Excel.Sheet" auto_search auto_rename rename_search_namespace("Office10")
中的auto_search vc6不认识,会产生编译错误,如果去掉这行,会产生很多错误
后来明白,因为Excel.exe库要用到vbe6ext.olb和mso.dll库中的一些定义,而原来的comexcel代码并不是按照mso、vbeext6、excel的顺序导入的,所以产生错误
以后需要使用xl5en32.olb库的时候再来研究有没有办法操作excel,不过,现在要结贴了,把资源留给需要解决问题的人;对于任何打开这个帖子进行过思考的人表示感谢,但愿这个帖子带给大家一些启示

还有就是,希望那些对office理解比较深刻的人不会认为,这个帖子的问题比较愚蠢,呵呵

5,172

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 Office开发/ VBA
社区管理员
  • Office开发/ VBA社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧