999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

使用COM接口調用OpenOffice

2019-08-10 06:36:17王成華滑永振
電腦知識與技術 2019年17期

王成華 滑永振

摘要:針對報表軟件要支持免費軟件OpenOffice的需求,本文介紹了使用COM接口操作OpenOffice軟件的方法和注意事項。在調用COM接口時,運用安全數組技術為接口函數傳遞參數。在操作OpenOffice表格文檔時,利用多單元格的操作,大大提高了寫入速度。本文還介紹了OpenOffice中結構體的使用方法。

關鍵詞:COM接口;UNO 組件技術;安全數組

中圖分類號:TP3? ? ?文獻標識碼:A

文章編號:1009-3044(2019)17-0273-02

開放科學(資源服務)標識碼(OSID):

Abstract: In order to reporting software to support free software OpenOffice requirements, this paper describes the method of operating OpenOffice through calling the COM interface and the precautions. When calling COM interface, use SAFEARRAY for passing parameters for the interface function. When operating OpenOffice document, multi-cell operating improves writing speed a lot. This article also describes the method of using OpenOffice structure.

Key words: COM Interface; UNO Component Technology; SAFEARRAY

1前言

隨著社會的發展,版權意識的加強,越來越多的人喜歡使用免費、開源的軟件產品。表格工具在很多軟件中都會被使用,為了迎合該思想,報表軟件需要增加對開源報表軟件的支持。

2 OpenOffice介紹

OpenOffice,是一套免費的、自由的、跨平臺的辦公軟件套件,其中的表格軟件為:Calc。

OpenOffice通過組件技術UNO(通用網絡對象)提供了開發接口。從 OpenOffice 1.1.0 開始,OpenOffice對組件擴展提供全面支持 [1]。UNO 提供橋,用于在用不同實現語言編寫的進程之間以及對象之間發送方法調用和接收返回值。

OpenOffice 是一種與平臺無關的應用程序,它的文件路徑采用URL表示法。以前綴 file:/// 開頭,后跟本地路徑。如果文件名包含子目錄,則使用單個正斜杠(而不是 Windows 中通常使用的反斜杠)分隔這些子目錄。例如:file:///C:/doc/test.ods。

此路徑表示C盤下的doc目錄下的test.ods文檔。用戶可以自己組織文件路徑,也可以調用OpenOffice為用戶提供的將本地路徑轉化成URL路徑的函數:ConvertToUrl[1]。

OpenOffice 提供了數百種服務。為了提供這些服務的概要信息,OpenOffice將這些服務合并為模塊。一個模塊中會存在一種或者多種服務,程序員在使用這些服務時,服務名稱要包含其模塊名,完整的服務名稱由以下部分組成:com.sun.star.表達式。

3利用COM接口操作OpenOffice

3.1 COM接口的調用

COM,即組件對象模型,是一種以組件為單元的對象模型,這種模型使各軟件可以用一種統一的方式進行交互[3]。在VC中,通過IDispatch::Invoke函數來調用接口函數[3]。COM接口的調用流程描述如下:

2. 新建表格文檔

3. 對文檔進行操作。

在使用OpenOffice的文檔時,有一個服務和一個接口最為常用:

com::sun::star::frame::Desktop服務:它與OpenOffice的內核服務類似,為OpenOffice的框架對象提供了一些功能,根據這些功能,對所有的文檔進行了分類。使用該服務,可以創建、打開和導出文檔。在用COM接口操作OpenOffice時,必須啟動該服務。

com::sun::star::frame::XcomponentLoader接口:主桌面程序接口,主要包含loadComponentFromURL方法,負責創建、導入和打開文檔。

在VC用,利用CLSID通過函數CoCreateInstance()或者CoCreateInstanceEx()可以創建OpenOffice的對象。OpenOffice安裝后可以在注冊表中得到它的注冊信息,包括了CLSID、PROGID等。啟動、操作OpenOffice的過程描述如下:

在調用接口loadComponentFromURL時注意到,最后一個參數是結構體的數組變量。在接口的使用中,傳遞數組型參數需要使用安全數組。

OpenOffice的結構體com.sun.star.beans.PropertyValue存儲了一些屬性值,設定不同的屬性值實現不同的功能,例如,我們在打開OpenOffice的文檔時,可以設置PropertyValue的屬性名為“Hidden”,屬性值設定為:TRUE,那么這個文檔將以隱藏的方式被創建或打開。

3.3結構體的使用

OpenOffice提供的接口函數中,經常遇到參數為一個結構體對象的情況,例如前面提到的loadComponentFromURL()函數。OpenOffice的結構體又該如何操作呢?

OpenOffice為用戶提供了創建結構體對象的接口函數:Bridge_GetStruct(),此函數由服務管理器對象提供,通過這個函數,可以得到結構體接口指針。注意:在為函數Bridge_GetStruct()傳遞參數時,結構體的路徑要求為包含所屬組件的詳細路徑。例如創建結構體PropertyValue的一個數組對象時,Bridge_GetStruct的參數應為:"com.sun.star.beans.PropertyValue"。

OpenOffice的服務管理器還提供了一種可以創建結構對象的服務:com.sun.star.reflection.CoreReflection。通過服務管理器對象創建此服務的對象亦可得到結構的對象。操作描述如下:

通過上面的兩種方法我們都可以創建一個結構的對象,通過VC的函數CComDispatchDriver::PutProperty()為結構對象賦值,同時VC的也提供了讀取結構屬性值的函數:CComDispatchDriver:: GetProperty。

介紹一個關于讀取的例子。在操作Calc時,經常需要得到表格中已使用的行列個數。在OpenOffice中沒有直接得到這個屬性的函數,但函數getRangeAddress可以得到CellRange的信息,返回值為結構CellRangeAddress的對象。CellRangeAddress包含如下信息:Sheet索引、開始行數、結束行數、開始列數、結束列數。利用該指針,通過VC函數CComDispatchDriver:: GetProperty可以得到結構體屬性的值。

3.4 效率提升:二維數組參數的傳遞

在用VC往表格內寫入數據量較大時,Calc的寫入速度很慢,效率很低。為了提升讀寫速度,OpenOffice提供了區域讀寫方案:setDataArray,可以往CellRange(單元格范圍)中一次性寫入全部數據。setDataArray的參數是一個Any類型的二位數組。Any類型是OpenOffice定義的一種數據類型,其功能和C++ 中的VARIANT相似,表示多類型。setDataArray的參數可以為string類型和float類型。二維數組的第一維元素個數為CellRange的行數(即rows),第二維的元素個數為CellRange的列數(即Columns)。

4結束語

本文講述了通過COM接口用VC調用OpenOffice的思想,及一些操作方式。COM組件具有與語言無關性和與平臺無關性,它可以給任何程序、任何系統提供服務,故COM組件技術被廣泛應用于是跨平臺開發。OpenOffice的免費性、跨平臺性,讓更多的用戶選擇了它,系統支持OpenOffice也是一個趨勢。

參考文獻:

[1] OpenOffice.org 3.1 SDK

[2] Microsoft.MSDN Library

[3] 潘愛民.COM原理與應用[M].北京:清華大學出版社,2000.

【通聯編輯:梁書】

主站蜘蛛池模板: 日韩麻豆小视频| 欧美乱妇高清无乱码免费| 日本精品中文字幕在线不卡| 国产成人亚洲综合a∨婷婷| 91免费观看视频| 成人av专区精品无码国产| 精品久久777| 久久黄色视频影| 青青热久免费精品视频6| 国产综合欧美| 91九色国产在线| 22sihu国产精品视频影视资讯| 国产真实二区一区在线亚洲| a级毛片一区二区免费视频| 欧美精品亚洲精品日韩专区va| 日日拍夜夜操| 国产精品xxx| 专干老肥熟女视频网站| 1024国产在线| 伊人久久婷婷| 东京热高清无码精品| 日韩精品毛片| 亚洲成人在线播放 | 天天综合网在线| 经典三级久久| 欧美精品三级在线| 国产粉嫩粉嫩的18在线播放91| 国产成人亚洲精品蜜芽影院| 第一区免费在线观看| 欧美翘臀一区二区三区| 亚洲AV无码精品无码久久蜜桃| 国产精品无码AV片在线观看播放| 国产第四页| 亚洲国产成人精品青青草原| 在线播放国产99re| 国产av一码二码三码无码| 在线不卡免费视频| 91亚洲国产视频| 日本www色视频| 国外欧美一区另类中文字幕| 免费观看无遮挡www的小视频| 91在线播放免费不卡无毒| 国产第一页屁屁影院| 久久精品最新免费国产成人| 亚洲中文无码h在线观看 | 亚洲区第一页| 全免费a级毛片免费看不卡| 亚洲精品国产乱码不卡| 欧美在线三级| 国产微拍精品| 久久精品亚洲热综合一区二区| 天天综合网在线| 91国内视频在线观看| 欧美精品在线观看视频| 99视频精品在线观看| 国产麻豆精品在线观看| 免费国产黄线在线观看| 国产福利一区在线| 日韩天堂视频| 国产亚洲精品97在线观看| 中国一级毛片免费观看| 中文字幕欧美日韩高清| 国产精品亚洲一区二区三区z | 亚洲国产综合自在线另类| 91在线丝袜| 久久综合成人| 久久黄色免费电影| 天堂岛国av无码免费无禁网站| 自偷自拍三级全三级视频| 色天堂无毒不卡| 亚洲欧美一区二区三区麻豆| 日本三区视频| 动漫精品啪啪一区二区三区| 日韩小视频在线播放| 国产福利影院在线观看| 国产精品毛片一区视频播| 欧美日韩午夜| 天堂va亚洲va欧美va国产| 欧美亚洲国产日韩电影在线| 国产永久无码观看在线| 欧美劲爆第一页| 自拍偷拍欧美日韩|