我们需要用的有三U类型的数据。在开始之前,我们需要有个方法来获得对单元格的访问。这一节的其他辅助性方法也用此ҎQ定义如下:
首先Q我们将要接触到文本cd的数据,比如说Javalobby文章的标题。对于这U数据,辅助性方法需要电子表对象、列位置、行位置以及数据本n作ؓ参数?
其次Q对于数字类型的数据Q比如说“Reply”列的数据Q辅助性方法要求传递doublecd的参敎ͼ
最后,管Calc的公式是普通的字符Ԍ我们可以使用OpenOffice.org的API所包含的单元格样式属性来为单元格讄预定义的“Result”样式Q这主要是针Ҏ们汇d复L的计公式来q行讄Q?
下面的代码将在随后被使用Q?
在ARGB颜色I间中,0xFF9933代表色。如果行数是偶数Q那么电子表、行C及橙色会被作为参C递给ҎQ?
如果用户需要看?#8220;Most Replies”或?#8220;Least Replies”Q我们将使用以下代码q行讄Q?
以下的方法需要电子表、列数、行C及颜色g为参敎ͼ
本文译自NetBeans.org中的文章,其中的代码也都经q译者测试。未完待l!Q!
上一节描q的Ҏ帮助我们从服务管理器中获取了com.sun.star.frame.Desktop服务。Desktop可以Ҏl定的URL来加载新的或者已l存在的lg。ؓ了提供这L服务QDesktop实现了com.sun.star.frame.XcomponentLoader接口Q这个接口只有一个方法根据给定的URL加蝲和实例化对应的组件。要构徏一个新的电子表格文档组Ӟ可以使用“private:factory/scalc”q样的URL。关于更详细的信息请参考OpenOffice.org开发指南《第8?nbsp; 电子表格》中?.2.1 “电子表格文档的徏立和加蝲”?/p>
下面q个Ҏ由用户界面所调用Q在调用之前用户需要将必要的参C递给上面代码中描q的ҎQ?
接着Q我们需要获取电子表格文档对象:
下一个定义的ҎQgetXSpreadsheet( )Q定义如下,q个Ҏ帮助我们_定位要与哪个电子表格文档q行交互。默认情况下QCalc应用E序在启动的时候就已经建立好了三个电子表。这三个电子表的名称分别?#8220;Sheet1”?#8220;Sheet2”?#8220;Sheet3”Q这三个电子表会随着您启动Calc应用E序而打开。如果您字W串“Sheet1”传递给getXSpreadsheet( )ҎQ那么接下来您所做的改动都将?#8220;Sheet1”电子表中q行。然而,您或许想要给自定义的电子表v一个不同于默认命名方式的名字。比如说Q您电子表命名?#8220;Javalobby Article Analyzer”。如果您这个名字作为参C递给getXSpreadsheet( )ҎQ一个以此字W串命名的电子表被构徏?
然而,默认情况下,?#8220;Sheet1”的电子表仍然是当前电子表Q所谓当前电子表是在应用程序启动时呈现在用户面前的那个电子表。无论您是否新徏电子表,默认的三个电子表始终都是存在的。假如您惛_您自己定义的电子表设为当前状态,您可以有两种选择。一U是使用在getXSpreadsheet( )Ҏ之后定义的getXActiveSpreadsheet( )ҎQ另外您可以直接默认的三个电子表删除掉Q就如下面的getXSpreadsheet( )Ҏ中的一P而一旦这三个电子表被删除之后也就只剩下您自定义的那个电子表了Q所剩的最后一个电子表也就理所当然地成为当前电子表了?
接下来的Ҏ是如何将电子表设为当前电子表Q?
本文译自NetBeans.org中的文章,其中的代码也都经q译者测试。未完待l!Q!
许多商业应用E序允许用户在应用程序中生成Z某些数据的报表。电子表格特别适合用于生成q样的报表。电子表g仅可以将数据l格式化以后以结构化的Ş式展现给用户Q而且为用h供了快速且高效的数据处理功能。正如上面所说的QOpenOffice.org的API提供了大量的cdҎ以方便开发者将OpenOffice.org电子表格的功能集成到他们自己的应用程序中。在应用E序中,单击某个按钮可以启动OpenOffice.orgq将应用E序生成的数据以自定义电子表格的形式展现出来?
新手可能p个开发领域很自然地提Z个问题:“一旦开发者正地安装了所有需要的软g后,一个应用程序如何启动OpenOffice.org的新实例以及如何获取q接呢?”。这个问题得C需要的回答之后Q开发者还可能提出Q?#8220;现在用户应用E序已经获取了OpenOffice.org的连接,那么应用E序应该如何这些数据嵌入到电子表格中呢Q?#8221;。在q篇文章中,我们首先着重满不熟悉OpenOffice.org的API的开发者的两个基本的需求。我们将向开发者展C如何获取到OpenOffice.org的连接,如何应用程序的数据转化为电子表格Ş式的数据。接着我们讨Z些其他的主题Q这些主题包括以~程方式构徏和析构电子表根{设|电子表格的单元格的背景颜色以及单元D框的格式化。然而,q里需要注意的是我们只xOpenOffice.org本n的集成,Z代码的可L我们忽略了诸如错误处理之类的问题。在q篇文章的结,您将对OpenOffice.org的API处理电子表格和如何在您自q应用E序中利用它们的相关知识有所了解?
q篇文章涉及的应用程序是ZSwing的应用程序,它通过使用OpenOfiice.org的API来访问OpenOffice.org的各U功能。当Ӟ您也可以使用C++或者COM/DCOM技术来q接OpenOffice.org。此cd用程序的代码q不一定必d于Swing来编写。这L应用E序可以使用C++、Java servlet、Java Server Page、JavaScript、VBScript、Delphi以及Visual Basic来编写。这文章中使用的基于Swing的应用程序将使用NetBeans IDE来构建,q且使用NetBeans Platform作ؓ起始炏V尽Q何集成开发工具都可以被用来构建如此简单的应用E序Q但是用NetBeansq行开发具有两优ѝ首先,在NetBeans中我们可以充分发挥GUI构徏器(即MatisseQ的功能来构建用L面,GUI构徏器可以帮助我们快速徏立应用程序界面的原型。其ơ,我们的应用E序ZNetBeans Platform意味着我们不需要再重头开始,而且我们可以通过其提供的模块框架来增强应用程序的可扩展性。这个应用程序将生成如下图所C的不需要Q何后期处理的电子表格文档Q?
电子表格中的数据来自于JTablelg。在现实情况下,q些数据往往来源于数据库中。在上面q及的应用程序中Q我们将把数据硬~码在程序代码中Q这主要是因为数据的来源问题已经出本篇文章的范围了。无论数据是否是来自于数据库Q当用户已经完成了数据的处理后,应用E序把JTable中的数据转换生成电子表格来呈现。除了数据之外,上面的图q展CZ以下几个元素Q这些元素将在下面的章节中述及:
q篇文章被分Z部分Q这三部分按序描述了开发的q程Q?
在开始之前,请先认以下的Y件已l安装好了:
注意Q这文章中展现的应用场景ƈ不需要用OpenOffice.org SDK。如果我们要使用SDK中的idlc或者javamaker{工P那么q个时候才需要SDK?
当我们用OpenOffice.org的API工作Ӟ我们可能会重复地执行某些d。比如说Q我们设|电子表D头的颜色Q但是同时我们也需要设|其他各行的颜色。实际上Q我们经怺替地讄各行的颜Ԍq样可以使得电子表格中的行更Ҏ分L。如果某文章的回复数比较高Q我们会对应的行设|ؓ不同的颜Ԍl色Q,而回复数比较低的行也被设|ؓ不同的颜ԌU色Q。行的颜色的讄需要编写用OpenOffice.org的API中的很多Ҏ的几行代码,而ؓ了避免重复编写相同的代码Q我们将q些代码l织C个辅助性方法当中去Q在需要进行设|的时候,我们只需要将颜色作ؓ参数传递就可以了。这可以使我们的代码易读性更好,更容易维护。下面我们将更详l地讨论q些辅助性方法?
误住,以下q及的辅助性方法可以用于Q何应用程序,q些辅助性方法ƈ不依赖于本篇文章里述及的应用E序。换句话_您可以充分地利用q些辅助性方法,在需要的时候不需要对代码q行M修改可以将q些代码_脓到应用程序的Java文g中用。您也可以在您的代码中引用这些代码,像q篇文章中做的一栗?
OpenOffice.org的Java API有自qҎ来引导OpenOffice.org。所?#8220;引导”OpenOffice.orgQ我们的意思是加蝲OpenOffice.org的启动程序。这通过Ljuh.jar文g所在的位置Q然后在q个位置或者上一U目录查找sofficeQ?exeQ来实现。这需要将juh.jar文g|于pȝ变量CLASSPATH所描述的目录中Q这h章构建的应用E序可以访问到q个文g。然而,q里需要将juh.jar文g随同应用E序一起分发,q种情况下,q种引导机制׃奏效了?
Z解决q个问题Q有两种可能的方法。首先,可以保Java随时都可以查扑ֈsofficeQ?exeQ,q可以通过包含可执行文g的目录加入到Windows的PATHpȝ变量中(在Mac、Unix和Linux中就是LD_LIBRARY_PATHpȝ变量Q。这U方法需要用戯行一些操作,而我们ƈ不希望这样做?
因此Q我们更們于推荐第二种ҎQ这U方法需要与讉K修饰W协同工作。在Sun的JDK中,ClassLoaderpȝcLURLClassLoadercȝ实例。这个类有一个私有方法addURLQ这个方法在Javapȝ开始的时候将被调用,从而将JAR文g以及其他相关资源d到系l环境中。通过反射机制Q我们获取一个URLClassLoader的实例,后使得addURLҎ辑ֈ可访问状态,然后再将包含可执行文件的目录d到URLClassLoader的URL栈中。这虽然昑־很晦涩,但是q种Ҏ很奏效?
但是Q它真的那么奏效吗?与系l类的访问修饰周旋L一件冒险的事情。addURLҎ被声明ؓprotected型的Q自然有其理由。另外,谁能保证使用的一定是Sun的JDK呢?或者Sun可能在随后的版本中忽略这个方法?然而,Java规范对上q这些事情ƈ没有作出明确的声明,因此别的JDK在默认情况下q不是将ClassLoadercȝcd配置为URLClassLoader。正是这个原因,我们使用“loader instanceof URLClassLoader”q样的检查代码来保事情是如预期那样的。这也是我们在用h有用Sun的JDK的情况下保应用E序没有M异常情况而需付出的代仗?
关于q程中构建对象的更详l的信息请参考OpenOffice.org的开发指南《第6?nbsp; Office开发》?
另一中方法就是用远E连接。在q程q接中,服务器名U和端口号作为参C递给q程q接ҎQ然后这个方法启动OpenOffice.orgq返回Desktop对象Q这个对象是利用OpenOffice.org工作的v炏V而且在远E连接的情况下,您可以让用户选择服务器和端口Q或者您可以在代码中使用pȝ讄来提供服务器和端口,q都看您的选择?
本文译自NetBeans.org中的文章,其中的代码也都经q译者测试。未完待l!Q!