<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    翻譯:OpenOffice.org API介紹(一)

    Posted on 2007-07-12 17:36 Tommy Jian 閱讀(7715) 評論(5)  編輯  收藏 所屬分類: OpenOffice.org

    1.引言

     

       許多商業應用程序允許用戶在應用程序中生成基于某些數據的報表。電子表格特別適合用于生成這樣的報表。電子表格不僅可以將數據經格式化以后以結構化的形式展現給用戶,而且為用戶提供了快速且高效的數據處理功能。正如上面所說的,OpenOffice.org的API提供了大量的類和方法以方便開發者將OpenOffice.org電子表格的功能集成到他們自己的應用程序中。在應用程序中,單擊某個按鈕就可以啟動OpenOffice.org并將應用程序生成的數據以自定義電子表格的形式展現出來。

       新手可能就這個開發領域很自然地提出一個問題:“一旦開發者正確地安裝了所有需要的軟件后,一個應用程序如何啟動OpenOffice.org的新實例以及如何獲取連接呢?”。這個問題得到了需要的回答之后,開發者還可能提出:“現在用戶應用程序已經獲取了OpenOffice.org的連接,那么應用程序應該如何將這些數據嵌入到電子表格中呢?”。在這篇文章中,我們將首先著重滿足不熟悉OpenOffice.org的API的開發者的兩個基本的需求。我們將向開發者展示如何獲取到OpenOffice.org的連接,如何將應用程序的數據轉化為電子表格形式的數據。接著我們將討論一些其他的主題,這些主題包括以編程方式構建和析構電子表格、設置電子表格的單元格的背景顏色以及單元格邊框的格式化。然而,這里需要注意的是我們只關注OpenOffice.org本身的集成,為了代碼的可讀性我們忽略了諸如錯誤處理之類的問題。在這篇文章的結尾,您將對OpenOffice.org的API處理電子表格和如何在您自己的應用程序中利用它們的相關知識有所了解。

       這篇文章涉及的應用程序是基于Swing的應用程序,它通過使用OpenOfiice.org的API來訪問OpenOffice.org的各種功能。當然,您也可以使用C++或者COM/DCOM技術來連接OpenOffice.org。此類應用程序的代碼并不一定必須基于Swing來編寫。這樣的應用程序可以使用C++、Java servlet、Java Server Page、JavaScript、VBScript、Delphi以及Visual Basic來編寫。這篇文章中使用的基于Swing的應用程序將使用NetBeans IDE來構建,并且使用NetBeans Platform作為起始點。盡管任何集成開發工具都可以被用來構建如此簡單的應用程序,但是使用NetBeans進行開發具有兩項優勢。首先,在NetBeans中我們可以充分發揮GUI構建器(即Matisse)的功能來構建用戶界面,GUI構建器可以幫助我們快速建立應用程序界面的原型。其次,將我們的應用程序基于NetBeans Platform意味著我們不需要再重頭開始,而且我們可以通過其提供的模塊框架來增強應用程序的可擴展性。這個應用程序將生成如下圖所示的不需要任何后期處理的電子表格文檔:

       電子表格中的數據來自于JTable組件。在現實情況下,這些數據往往來源于數據庫中。在上面述及的應用程序中,我們將把數據硬編碼在程序代碼中,這主要是因為數據的來源問題已經超出本篇文章的范圍了。無論數據是否是來自于數據庫,當用戶已經完成了數據的處理后,應用程序將把JTable中的數據轉換生成電子表格來呈現。除了數據之外,上面的圖還展示了以下幾個元素,這些元素將在下面的章節中述及:

    •   表頭,電子表格有一行使用特殊顏色(深藍色)標識的表頭。
    •   行顏色的交錯,電子表格中的其他行的顏色是交錯的,有的背景色是桔色,而有的是白色。
    •   高或者低的回復,最后一列展示了某篇文章相關的回復數量,回復量比較高的行的背景顏色是綠色,而回復量比較低的行的背景顏色是紅色,另外,在主表格的下方的兩個單元格分別使用相同的顏色來標識高或者低回復文章的作者。
    •   回復的總數,“Reply”列的最后一行的下方的單元格顯示了總回復數,這個單元格的格式與其他的單元格不太一樣,總回復數是通過OpenOffice.org的API來使用Calc的公式計算得到的。
    • 電子表格名稱,在上面圖形的左下角,您可以看到“Javalobby Analysis”這樣的名稱,而您并沒有看到Calc打開時的默認的電子表(名稱為“Sheet1”、“Sheet2”、“Sheet3”),如下文所闡述的,電子表的名稱的更改和默認電子表的移除都可以使用編程方式來實現。

       這篇文章被分為三部分,這三部分按順序描述了開發的過程:

    1.   簡化重復的編碼任務,這一節中我們將了解OpenOffice.org的API中可復用的元素,而這些元素將在后面的章節中被集成到我們的應用程序中。
    2. 建立用戶界面原型,為了測試最后一節中的業務邏輯,我們將構建Swing應用程序的原型。
    3. 集成輔助性方法,應用程序的核心是將輔助性方法和用戶界面集成起來,并且執行計算,生成電子表格。

      2.系統需求

         在開始之前,請先確認以下的軟件已經安裝好了:

      • OpenOffice.org,盡管這篇文章中的代碼也兼容Star Office,但是因為我們使用OpenOffice.org的API相關的JAR文件,所以最好是安裝OpenOffice.org。我們將使用在OpenOffice.org的安裝目錄下的四個JAR文件,您可以在OpenOffice.org 2.0\program\classes文件夾中找到以下四個JAR文件:juh.jar、jurt.jar、ridl.jar和unoil.jar。
      • NetBeans IDE,這篇文章關注的是OpenOffice.org的API,其中討論的代碼可以使用很多種編程語言描述,可以供多種語言編寫的應用程序使用。如果您想構建這篇文章中描述的基于Swing的應用程序,您就需要去下載NetBeans 5.0或者更高的版本。

         注意:這篇文章中展現的應用場景并不需要使用OpenOffice.org SDK。如果我們要使用SDK中的idlc或者javamaker等工具,那么這個時候才需要SDK。

      3.背景知識:簡化重復的編碼工作

         當我們使用OpenOffice.org的API工作時,我們可能會重復地執行某些任務。比如說,我們設置電子表格表頭的顏色,但是同時我們也需要設置其他各行的顏色。實際上,我們經常交替地設置各行的顏色,這樣可以使得電子表格中的行更容易分辨。如果某篇文章的回復數比較高,我們會將對應的行設置為不同的顏色(綠色),而回復數比較低的行也被設置為不同的顏色(紅色)。行的顏色的設置需要編寫使用OpenOffice.org的API中的很多方法的幾行代碼,而為了避免重復編寫相同的代碼,我們將這些代碼組織到一個輔助性方法當中去,在需要進行設置的時候,我們只需要將顏色作為參數傳遞就可以了。這可以使我們的代碼易讀性更好,更容易維護。下面我們將更詳細地討論這些輔助性方法。

         請記住,以下述及的輔助性方法可以用于任何應用程序,這些輔助性方法并不依賴于本篇文章里述及的應用程序。換句話說,您可以充分地利用這些輔助性方法,在需要的時候不需要對代碼進行任何修改就可以將這些代碼粘貼到應用程序的Java文件中使用。您也可以在您的代碼中引用這些代碼,就像這篇文章中做的一樣。

        3.1 使用引導程序

         OpenOffice.org的Java API有自己的方法來引導OpenOffice.org。所謂“引導”OpenOffice.org,我們的意思是加載OpenOffice.org的啟動程序。這通過尋找juh.jar文件所在的位置,然后在這個位置或者上一級目錄查找soffice(.exe)來實現。這需要將juh.jar文件置于系統變量CLASSPATH所描述的目錄中,這樣本章構建的應用程序就可以訪問到這個文件。然而,這里需要將juh.jar文件隨同應用程序一起分發,這種情況下,這種引導機制就不奏效了。

         為了解決這個問題,有兩種可能的方法。首先,可以確保Java隨時都可以查找到soffice(.exe),這可以通過將包含可執行文件的目錄加入到Windows的PATH系統變量中(在Mac、Unix和Linux中就是LD_LIBRARY_PATH系統變量)。這種方法需要用戶進行一些操作,而我們并不希望這樣做。

         因此,我們更傾向于推薦第二種方法,這種方法需要與訪問修飾符協同工作。在Sun的JDK中,ClassLoader系統類是URLClassLoader類的實例。這個類有一個私有方法addURL,這個方法在Java系統開始的時候將被調用,從而將JAR文件以及其他相關資源添加到系統環境中。通過反射機制,我們獲取一個URLClassLoader的實例,爾后使得addURL方法達到可訪問狀態,然后再將包含可執行文件的目錄添加到URLClassLoader的URL棧中。這雖然顯得很晦澀,但是這種方法很奏效。

         但是,它真的那么奏效嗎?與系統類的訪問修飾周旋總是一件冒險的事情。addURL方法被聲明為protected型的,自然有其理由。另外,誰能保證使用的一定是Sun的JDK呢?或者Sun可能在隨后的版本中忽略這個方法?然而,Java規范對上述這些事情并沒有作出明確的聲明,因此別的JDK在默認情況下并不是將ClassLoader類的類型配置為URLClassLoader。正是這個原因,我們使用“loader instanceof URLClassLoader”這樣的檢查代碼來確保事情是如預期那樣的。這也是我們在用戶沒有使用Sun的JDK的情況下確保應用程序沒有任何異常情況而需付出的代價。

         關于過程中構建對象的更詳細的信息請參考OpenOffice.org的開發指南《第6章  Office開發》。

      public Object simpleBootstrap(String pathToExecutable) throws Exception 
      {
          
      //Get the executable from the incoming String:
          String ooBaseDirectory = pathToExecutable.replaceAll("soffice(.exe){0,1}$","");
          System.out.println(
      "Your ooBaseDir is: " + ooBaseDirectory);
          ClassLoader loader 
      = ClassLoader.getSystemClassLoader();
          if (loader instanceof URLClassLoader){
              URLClassLoader cl 
      = (URLClassLoader)loader;
              Class sysclass 
      = URLClassLoader.class;
              try {
                  Method method 
      = sysclass.getDeclaredMethod
                      (
      "addURL"new Class[]{URL.class});
                  method.setAccessible(
      true);
                  method.invoke(cl, 
      new Object[]{new File(ooBaseDirectory).toURL()});
              } 
      catch (Throwable t) {
                  t.printStackTrace();
                  throw new IOException("Error, could not add URL to system classloader");
              }
          } 
      else {
              System.out.println(
      "Error occured, URLClassLoader expected but " +
              loader.getClass() 
      + " received. Could not continue.");
          }
          //Get the office component context:
          XComponentContext xContext = Bootstrap.bootstrap();
          //Get the office service manager:
          XMultiComponentFactory xServiceManager = xContext.getServiceManager();
          //Create the desktop, which is the root frame of the
          //hierarchy of frames that contain viewable components:
          Object desktop = xServiceManager.createInstanceWithContext
              (
      "com.sun.star.frame.Desktop", xContext );
          return desktop;
      }

       

         另一中方法就是使用遠程連接。在遠程連接中,服務器名稱和端口號作為參數傳遞給遠程連接方法,然后這個方法啟動OpenOffice.org并返回Desktop對象,這個對象是利用OpenOffice.org工作的起點。而且在遠程連接的情況下,您可以讓用戶選擇服務器和端口,或者您可以在代碼中使用系統設置來提供服務器和端口,這都看您的選擇。


      本文譯自NetBeans.org中的文章,其中的代碼也都經過譯者測試。未完待續!!!

      Feedback

      # re: 翻譯:OpenOffice.org API介紹(一)  回復  更多評論   

      2008-07-09 15:51 by xiaowu
      是否有openOffice 中文API 以及各接口的作用及用法

      # re: 翻譯:OpenOffice.org API介紹(一)[未登錄]  回復  更多評論   

      2008-08-27 10:41 by 人在天涯
      對啊。同上,我也需要一個API以及各個接口的作用和方法的文檔

      # re: 翻譯:OpenOffice.org API介紹(一)[未登錄]  回復  更多評論   

      2008-08-27 10:42 by 人在天涯
      有的郵件bentengwu@163.com.有的話發我。大恩大德沒齒難忘

      # re: 翻譯:OpenOffice.org API介紹(一)  回復  更多評論   

      2010-04-27 17:35 by gohin
      是否有openOffice 中文API 以及各接口的作用及用法,
      萬分感激,gohinb@163.com.

      # re: 翻譯:OpenOffice.org API介紹(一)  回復  更多評論   

      2010-07-03 17:36 by yukun
      你好博主

      如果能提供一個API以及各個接口的作用和方法的文檔或者,提示我一下哪里能找到此類文檔,感激不盡。

      yukun18@hotmail.com
      主站蜘蛛池模板: 久久久久se色偷偷亚洲精品av| 国产精品亚洲片在线观看不卡 | 亚洲AV色吊丝无码| 免费A级毛片无码视频| 亚洲成亚洲乱码一二三四区软件| aa级女人大片喷水视频免费| 亚洲欧洲日产国码高潮αv| 激情吃奶吻胸免费视频xxxx| 国产免费av片在线无码免费看| 亚洲精品色播一区二区| 免费特级黄毛片在线成人观看 | 麻豆69堂免费视频| 又黄又爽的视频免费看| 免费无遮挡无遮羞在线看| 亚洲精品无码AV中文字幕电影网站| 香蕉视频免费在线| 亚洲日产无码中文字幕| 亚洲免费观看视频| 亚洲国产高清视频在线观看| 成年18网站免费视频网站| 国产成人久久精品亚洲小说| 国产精品亚洲精品日韩已方| 免费在线观看一级片| 亚洲经典在线中文字幕| 四虎免费大片aⅴ入口| 一级特黄aaa大片免费看| 亚洲中文字幕在线乱码| 久久成人无码国产免费播放| 亚洲午夜一区二区电影院| 成人永久福利免费观看| 久久青草91免费观看| 亚洲免费网站在线观看| 免费国产a国产片高清网站| a毛片免费观看完整| 亚洲乱码日产精品BD在线观看| 免费h黄肉动漫在线观看| 男人都懂www深夜免费网站| 亚洲一区二区三区国产精华液| 亚洲精品国自产拍在线观看| 69pao强力打造免费高清| 猫咪www免费人成网站|