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.

【通聯編輯:梁書】

主站蜘蛛池模板: 77777亚洲午夜久久多人| 国产精品女主播| 国产69精品久久久久妇女| 黄色一及毛片| h网站在线播放| 欧美成人免费午夜全| 72种姿势欧美久久久久大黄蕉| 国产v精品成人免费视频71pao| 欧美自拍另类欧美综合图区| 日韩一区精品视频一区二区| 激情视频综合网| 亚洲成人黄色网址| 日本免费新一区视频| 一区二区三区国产精品视频| 丝袜美女被出水视频一区| 在线精品欧美日韩| 国产精品午夜电影| 久久影院一区二区h| AV天堂资源福利在线观看| 91精品国产情侣高潮露脸| 国产h视频在线观看视频| 亚洲午夜片| 亚洲国产清纯| 天天躁夜夜躁狠狠躁躁88| 无码综合天天久久综合网| 欧美色99| 成人蜜桃网| 国产www网站| 免费精品一区二区h| 亚洲全网成人资源在线观看| 午夜国产大片免费观看| 亚洲欧美另类日本| 永久免费精品视频| 四虎国产在线观看| 午夜成人在线视频| 国产后式a一视频| 亚洲精品动漫| 久久精品国产免费观看频道| 69国产精品视频免费| 高清精品美女在线播放| 久久免费精品琪琪| 亚洲无线一二三四区男男| 不卡色老大久久综合网| 91精品国产福利| 精品91在线| 中文字幕波多野不卡一区| 亚洲欧美成人网| 91麻豆精品国产91久久久久| 666精品国产精品亚洲| 无码有码中文字幕| 国产高清毛片| 久99久热只有精品国产15| 香蕉视频在线观看www| 国产精品久久久精品三级| 国内精品视频在线| 青青青视频免费一区二区| 国产女人在线视频| 国产成人狂喷潮在线观看2345| 中文国产成人精品久久| 亚洲AV无码乱码在线观看裸奔| 亚洲国产清纯| 久久a毛片| 国产JIZzJIzz视频全部免费| 国产在线专区| 青青青草国产| 综合网天天| 日韩色图在线观看| 日本欧美视频在线观看| 久热精品免费| 亚洲精品图区| 中文字幕在线看| 亚洲综合第一页| 欧美精品亚洲二区| 亚洲精品爱草草视频在线| 亚洲AⅤ永久无码精品毛片| 丁香六月激情综合| 美女无遮挡被啪啪到高潮免费| 亚洲性视频网站| www亚洲天堂| 9cao视频精品| 久久久久久高潮白浆| 日韩少妇激情一区二区|