用户操作
[即时聊天] [发私信] [加为好友]
王卫星ID:wangweixing2000
58819次访问,排名1795好友68人,关注者200
爱好:足球,健身,看电影.
wangweixing2000的文章
原创 70 篇
翻译 0 篇
转载 41 篇
评论 44 篇
星的公告
知识共享,快乐coding!! 千里之行﹐始於足下! Locations of visitors to this page
最近评论
hailongxl://修改employee密码
extern "C" XDATAMANAGER_API int __stdcall DBChangePassword(const char *user,const char*pass)
{
#if USE_SQLITE
if( db == NULL )return X_DB_NOT_INIT;

……
lhtang:Program file does not exist
E:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\WINSCW\UDEB\first_syb_hello_0xE40082A0.exe not found

这是为什么?
lhtang:里面只是些zip压缩包,ide里是不是有个添加插件的界面,还有下的1.3的carbide打不开
wangweixing2000:http://www.forum.nokia.com/info/sw.nokia.com/id/48a93bd5-028a-4b3e-a0b1-148ff203b2b3/Extensions_plugin_S60_3rd_ed.html
这里去下载
lhtang:Extensions plug-in如何安装,里面没有安装文件,我邮箱tlhad@126.com,请赐教.
文章分类
收藏
相册
csdn友情连接
COM集中营
kennykerr的blog
休闲空间(RSS)
婉儿的blog(RSS)
数字金刚
推荐经典网站
Codeguru
CodeProject
我的网站
我的免费代码垃圾堆
我的网站
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 如何导入office的类型库?这些类型库都在什么地方呢?收藏

新一篇: 终于看到了> | 旧一篇: 如何通过code清理word的历史纪录(不管word是否打开)!

关键词:
Office,COM,OLB
 
我们要操作office那么第一个想到的就是该怎么把它的库加入到我们项目中呢?
最近对office研究了一番,ms的office可以说完全利用com的一个杰作,我们没有
比它用的更好,以前看到过国外有几家公司也用com写的开发包,例如ArcGis,
不能不佩服,看来还需要不断练内功!
最近去csdn论坛发了个关于offfice清理问题的帖子,冷清的让我心寒!这些大牛
都去写blog了?

进入正题,下面我列出office当前所有版本的类型库,office2007以后再说!哈哈!
   office版本号                           类型库
--------------------------------------------------

Microsoft Access 97 Msacc8.olb
Microsoft Jet Database 3.5 DAO350.dll
Microsoft Binder 97 Msbdr8.olb
Microsoft Excel 97 Excel8.olb
Microsoft Graph 97 Graph8.olb
Microsoft Office 97 Mso97.dll
Microsoft Outlook 97 Msoutl97.olb
Microsoft PowerPoint 97 Msppt8.olb

Microsoft Word 97 Msword8.olb
Microsoft Access 2000 Msacc9.olb
Microsoft Jet Database 3.51 DAO360.dll
Microsoft Binder 2000 Msbdr9.olb
Microsoft Excel 2000 Excel9.olb
Microsoft Graph 2000 Graph9.olb
Microsoft Office 2000 Mso9.dll
Microsoft Outlook 2000 Msoutl9.olb
Microsoft PowerPoint 2000 Msppt9.olb
Microsoft Word 2000 Msword9.olb

Microsoft Access 2002 Msacc.olb
Microsoft Excel 2002 Excel.exe
Microsoft Graph 2002 Graph.exe
Microsoft Office 2002 MSO.dll
Microsoft Outlook 2002 MSOutl.olb
Microsoft PowerPoint 2002 MSPpt.olb
Microsoft Word 2002 MSWord.olb

Microsoft Office Access 2003 Msacc.olb
Microsoft Office Excel 2003 Excel.exe
Microsoft Graph 2003 Graph.exe
Microsoft Office 2003 MSO.dll
Microsoft Office Outlook 2003 MSOutl.olb
Microsoft Office PowerPoint 2003 MSPpt.olb
Microsoft Office Word 2003 MSWord.olb

上面你可能注意到了,office2002和office2003怎么有类型库在exe中?
我也不知道ms为啥把它放进去,不过用import一样的导入。

下面我以office2003为例写的一个例子:

#import "C:\\Program Files\\Common Files\\system\\ado\\msado21.tlb" no_namespace \
rename ("EOF", "adoEOF")

#import "C:\\Program Files\\Common Files\\Microsoft Shared\\DAO\\DAO360.DLL" rename("EOF","EndOfFile") \
rename("BOF","BegOfFile")

#import "C:\Program Files\\Common Files\\Microsoft Shared\\Office11\\MSO.DLL" rename_namespace("Office")
using namespace Office;

#import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.olb" rename_namespace("VBE6")
using namespace VBE6;

#import "C:\Program Files\Microsoft Office\Office11\MSWORD.olb" rename("ExitWindows","ExitWindowsEx"),named_guids,rename_namespace("MSWord")
using namespace MSWord;

#import "C:\Program Files\Microsoft Office\Office11\MSACC.olb" implementation_only,rename_namespace("MSACC")
using namespace MSACC;

#import "C:\Program Files\Microsoft Office\Office11\MSPPT.olb" implementation_only,rename_namespace("MSPPT")
using namespace MSPPT;

#import "C:\\Program Files\\Microsoft Office\\Office11\\Excel.exe" rename("RGB","RGBEx"),rename("DialogBox","DialogBoxEx"),rename_namespace("MSExcel")
using namespace MSExcel;

说明:
1、前四个的路径都是默认的,后四个根据版本不同更改即可!
2、ado和dao是为了支持Access的,如果你不是操作Access那么可以去掉他们!
3、office和VBE6是必须的,我们每次都会用到!

下面给一个简单例子:
int _tmain(int argc, _TCHAR* argv[])
{
//Initialize the COM libraries
::CoInitialize(NULL);

std::cout<<"Begin clear!"<<std::endl;

// Create an instance of the Word application and obtain the
// pointer to the application's IDispatch interface.
CLSID clsidWord;
CLSIDFromProgID(L"Word.Application", &clsidWord);

IUnknown* pUnk;

HRESULT hr = GetActiveObject(clsidWord, NULL, (IUnknown**)&pUnk); //得到当前打开的word的接口指针
//你也可以用CoCreateInstance(...)去创建!

MSWord::_ApplicationPtr pApplication = pUnk;
//...
::CoUninitialize();
std::cout<<"Finish!---Thanks!"<<std::endl;
system("PAUSE");
return 0;
}

作者:wangweixing2000
转贴请注明出处!谢谢!

发表于 @ 2006年11月09日 17:20:00|评论(loading...)|收藏

新一篇: 终于看到了> | 旧一篇: 如何通过code清理word的历史纪录(不管word是否打开)!

评论

#laorer 发表于2008-05-15 10:10:46  IP: 222.125.68.*
如果不知道客房端office装在哪,是不是又要查找下路径,

如果不知道客房端office的版本号,又要一堆的代码了吧
#wangweixing2000 发表于2008-05-15 14:04:14  IP: 202.165.107.*
TO: laorer
import 只是导入类型库,那个路径只是为了编译时候通过,Office都是写COM组件,运行在客户机器上和他的office装在哪里没有关系,他们都是通过guid找到的,代码中基本和版本的关系也很少,各个版本的Interface基本上都可以兼容的。:)
#laorer 发表于2008-05-16 08:56:18  IP: 222.125.68.*
OK,又学到一招,开始看到那个导入 dll, 以为是运行时需要指定 dll路径呢,
CLSID clsidWord;
CLSIDFromProgID(L"Word.Application", &clsidWord);
其实直接这句话就可以得到指针了吧
#wangweixing2000 发表于2008-05-16 09:20:13  IP: 202.165.107.*
HRESULT hr = GetActiveObject(clsidWord, NULL, (IUnknown**)&pUnk); //得到当前打开的word的接口指针

CLSID clsidWord;
CLSIDFromProgID(L"Word.Application", &clsidWord); 是得到它的clsid
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © 星