<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) 評(píng)論(5)  編輯  收藏 所屬分類: OpenOffice.org

    1.引言

     

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

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

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

       電子表格中的數(shù)據(jù)來自于JTable組件。在現(xiàn)實(shí)情況下,這些數(shù)據(jù)往往來源于數(shù)據(jù)庫(kù)中。在上面述及的應(yīng)用程序中,我們將把數(shù)據(jù)硬編碼在程序代碼中,這主要是因?yàn)閿?shù)據(jù)的來源問題已經(jīng)超出本篇文章的范圍了。無論數(shù)據(jù)是否是來自于數(shù)據(jù)庫(kù),當(dāng)用戶已經(jīng)完成了數(shù)據(jù)的處理后,應(yīng)用程序?qū)袹Table中的數(shù)據(jù)轉(zhuǎn)換生成電子表格來呈現(xiàn)。除了數(shù)據(jù)之外,上面的圖還展示了以下幾個(gè)元素,這些元素將在下面的章節(jié)中述及:

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

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

    1.   簡(jiǎn)化重復(fù)的編碼任務(wù),這一節(jié)中我們將了解OpenOffice.org的API中可復(fù)用的元素,而這些元素將在后面的章節(jié)中被集成到我們的應(yīng)用程序中。
    2. 建立用戶界面原型,為了測(cè)試最后一節(jié)中的業(yè)務(wù)邏輯,我們將構(gòu)建Swing應(yīng)用程序的原型。
    3. 集成輔助性方法,應(yīng)用程序的核心是將輔助性方法和用戶界面集成起來,并且執(zhí)行計(jì)算,生成電子表格。

      2.系統(tǒng)需求

         在開始之前,請(qǐng)先確認(rèn)以下的軟件已經(jīng)安裝好了:

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

         注意:這篇文章中展現(xiàn)的應(yīng)用場(chǎng)景并不需要使用OpenOffice.org SDK。如果我們要使用SDK中的idlc或者javamaker等工具,那么這個(gè)時(shí)候才需要SDK。

      3.背景知識(shí):簡(jiǎn)化重復(fù)的編碼工作

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

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

        3.1 使用引導(dǎo)程序

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

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

         因此,我們更傾向于推薦第二種方法,這種方法需要與訪問修飾符協(xié)同工作。在Sun的JDK中,ClassLoader系統(tǒng)類是URLClassLoader類的實(shí)例。這個(gè)類有一個(gè)私有方法addURL,這個(gè)方法在Java系統(tǒng)開始的時(shí)候?qū)⒈徽{(diào)用,從而將JAR文件以及其他相關(guān)資源添加到系統(tǒng)環(huán)境中。通過反射機(jī)制,我們獲取一個(gè)URLClassLoader的實(shí)例,爾后使得addURL方法達(dá)到可訪問狀態(tài),然后再將包含可執(zhí)行文件的目錄添加到URLClassLoader的URL棧中。這雖然顯得很晦澀,但是這種方法很奏效。

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

         關(guān)于過程中構(gòu)建對(duì)象的更詳細(xì)的信息請(qǐng)參考OpenOffice.org的開發(fā)指南《第6章  Office開發(fā)》。

      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;
      }

       

         另一中方法就是使用遠(yuǎn)程連接。在遠(yuǎn)程連接中,服務(wù)器名稱和端口號(hào)作為參數(shù)傳遞給遠(yuǎn)程連接方法,然后這個(gè)方法啟動(dòng)OpenOffice.org并返回Desktop對(duì)象,這個(gè)對(duì)象是利用OpenOffice.org工作的起點(diǎn)。而且在遠(yuǎn)程連接的情況下,您可以讓用戶選擇服務(wù)器和端口,或者您可以在代碼中使用系統(tǒng)設(shè)置來提供服務(wù)器和端口,這都看您的選擇。


      本文譯自NetBeans.org中的文章,其中的代碼也都經(jīng)過譯者測(cè)試。未完待續(xù)!!!

      Feedback

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

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

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

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

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

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

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

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

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

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

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

      yukun18@hotmail.com

      只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


      網(wǎng)站導(dǎo)航:
      博客園   IT新聞   Chat2DB   C++博客   博問  
       
      主站蜘蛛池模板: 亚洲韩国精品无码一区二区三区| 亚洲精品免费在线| 中文字幕免费不卡二区| 亚洲日本乱码一区二区在线二产线| 噼里啪啦电影在线观看免费高清 | 1000部拍拍拍18勿入免费视频下载| 国产精品亚洲午夜一区二区三区| 亚洲成av人片不卡无码久久 | 免费观看午夜在线欧差毛片| 99精品视频免费| 久久青草国产免费观看| 亚洲噜噜噜噜噜影院在线播放| 国产18禁黄网站免费观看| 99re免费99re在线视频手机版| 精品亚洲福利一区二区| 亚洲福利在线视频| 中文字幕的电影免费网站| 国产免费人视频在线观看免费| 最好免费观看高清在线| 亚洲精品成a人在线观看夫| 四虎www成人影院免费观看| 你好老叔电影观看免费| 久久精品国产亚洲AV电影网| 亚洲一区二区三区四区在线观看| 国产免费av片在线无码免费看 | 亚洲一区二区高清| 桃子视频在线观看高清免费完整| 亚洲成a人不卡在线观看| 亚洲精品一级无码中文字幕| 免费大片黄在线观看yw| 日韩免费高清播放器| 精品亚洲成a人在线观看| 亚洲永久中文字幕在线| 亚洲日本va在线视频观看| 国产精品美女自在线观看免费| 亚洲精品免费在线视频| a级毛片高清免费视频| 黄色毛片视频免费| 亚洲成在人线aⅴ免费毛片| 亚洲一级免费视频| 久久精品亚洲中文字幕无码麻豆|