關鍵詞:
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
轉貼請註明出處!謝謝!