文档库 最新最全的文档下载
当前位置:文档库 › 永中Office二次开发技术手册完整版

永中Office二次开发技术手册完整版

永中Office二次开发技术手册完整版
永中Office二次开发技术手册完整版

永中O f f i c e二次开发

技术手册

HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】

永中O f f i c e二次开发技术手册

前言

一、宏和二次开发

在实现办公自动化的今天,我们经常会碰到这样一个问题,在使用办公软件时总要重复流程一样的相同操作,这使工作变得繁琐而枯燥,能不能提供一种方法,使这些相同操作能够通过一个命令自动完成或者使用更为简单的途径得到呢?宏因此而产生了。

宏是指用一个符号名称所代表的一段程序代码,将定义代码段按实际参数进行加工,形成实际代码直接插入程序的执行序列中。许多应用程序具有建立宏的功能,它们可以把操作人员为解决某项问题而执行的一些操作命令记下来,形成一个文件段,并且用一个符号表示。当同样的问题重复执行时,只要输入代表这一系列命令的宏命令即可。这些代码可以是由用户编写,也可以通过办公软件提供的宏录制功能记录下简单任务而生成。

结合自己的需要,利用宏充分开发应用程序潜在的功能,可以获得使用上最大限度的满足,这也就是通常意义上的二次开发,即利用宏语言扩展宿主程序的功能、集成不同类型的数据以实现办公软件在具体事件中的解决方案。

永中Office为您提供了非常丰富而全面的宏API(API表示应用程序接口),通过这些API您可以非常自如操作永中Office。并且使您在实现自定义的解决方案时更加得心应手,更灵活的发挥永中Office 的集成优势。

二、本手册结构

第一部分为二次开发环境。

永中Office的二次开发,我们推荐,一是利用永中Office自带的宏编辑器进行开发,二是可以在Eclipse上开发。

第二部分为应用和API

我们在第2章给出了二次开发结构,也即永中Office二次开发的类层次图。

有了该类层次图,就可以了解永中Office二次开发中的层次和对象了。

第3章为总控,这里有二次开发应用的总入口

第4章为电子表格应用

第5章为文字处理应用,自由表格也在这一章

第6章为幻灯片演示

第7章为公共组件,包含2个主要组件:自选图形和图表

第三部分为其它语言调用与应用

第8章为永中Office COM组件开发

第9章为嵌入浏览器样例

第10章为嵌入Java应用程序样例

附录

附录一为永中Office 二次开发技巧集,我们列举了一些二次开发技巧

附录一为永中Office 二次开发FAQ

我们希望起到抛砖引玉的作用。详细的API说明可以参见永中Office的API文档。

第一章二次开发环境

宏编辑器中进行二次开发

1、从菜单“工具”—》“宏”—》“宏编辑器”,打开宏编辑器。

2、在宏编辑器中,从菜单“插入”—》“模块”,新建一个模块。

3、在模块中,可以添加宏,通过宏,就可以操作永中Office。

注意:永中Office的宏语言是JAVA。

在模块中添加宏时,请不要添加方法的修饰符,如 public,private,protected,static,final 等。

永中Office的宏只能在永中Office自己的文件格式(.eio)中使用,保存为微软格式文件时宏代码会丢失。

使用Eclipse 进行二次开发

1、下载并解压Eclipse包。

2、在Eclipse目录下点击Eclipse可执行文件,启动Eclipse。

3、在Eclipse中,新建一个项目:

在菜单“File”—》“New”—》“Project...”弹出“New Pro ject”对话框,在列表中选中“Java Project”选项,下一步,给定一个项目名,假设项目名为“example”,完成,这样就建立了一个名为“example”的项目。

4、在Eclipse的“Package Explorer”里,选中“example”节点,右键弹出菜单,点击“Properties”菜单项,在弹出的“Properties”对话框中选中左边的“Java Build Path”,选中对话框右边的第三项“Libraries”页面,点击“Add External Jars...”按钮,将永中Office 按装目录下的“”添加进编译环境。这样就可以应用永中Office 的开发包对永中Office 进行二次开发了。

5、在Eclipse 的“Package Explorer”里,选中“example”节点,选择菜单“File”->“New”->“Class”弹出“New Java Class”对话框,填写类名称,假设为“MyTest”,点击完成按钮,这样就在项目“example”中建立了一个名为“MyTest”的新类。

第二章二次开发对象层次结构

API是Application Programming Interface(应用程序编程接口)的缩写,即一个主应用程序的开发者提供给其他开发者使用的服务和功能。这意味着API允许一些外部程序访问提供API的程序,即另外的程序通过主应用程序的API而使用某一个子程序的功能。许多大的应用程序都提供了API供二次开发者使用,如各种程序开发语言、各种操作系统及办公软件等。

API不仅仅可以被外部应用程序使用,许多大型应用程序也使用API 以便于自身程序的一部分与另一部分联系。如果一套服务或帮助功能——一个大应用程序的内核已被建立,那么,一个做完了的API就可以使开发应用程序的剩余部分变得十分轻松;此外,将其中一部分常用而且稳定的API开放给用户,用户在此基础上可以根据自己的需要开发出更加强大和个性化的功能,产品功能在适用过程中得到扩展,与用户的交互性也因此而更强。

基于跨平台操作的特性,永中Office充分考虑到用户对功能扩展的要求、不同需求对解决方案的要求及个性化等其它各方面的要求,在其内置的宏编辑器中提供了一整套实现内部功能的API供用户调用;此外,永中Office宏编辑器还支持导入JAVA 的类库以使用JAVA 语言强大而丰富的类。

任何API都是基于对象的操作,在操作对象的基础上实现功能。永中Office二次开发的API即相当于JAVA语言中的方法,既可以是对某一对象单个属性或事件的控制和操作,也可以是对整个对象进行的操作,从而实现形式多样的功能。

单实例和多实例

永中Office二次开发体系支持单实例和多实例两种方式。单实例方式通常在永中Office的宏编辑器中使用,多实例方式通常在外部调用永中Office时使用。单实例和多实例在代码中的差别体现在创建永中Office实例时,下面是示例代码:单实例示例:

从包含该对象的最外层开始,由外及内逐层找到其子对象,一直到所要访问的对象。

如要访问文件名为“文件”的电子表格文档中“工作表1”的“A1”单元格,需

象,那么就可以直接对其子对象进行访问,例如以下是一个先打开一个文档然后对其

文件(Workbook)

义属性对象,文件版本管理对象等等。通过这些方法你能得到文件的完整信息。

Workbook book = ().getActiveWorkbook();

Presentation present = ().getActivePresentation();

Print print = ();

(true);

("abc");

(3);

();

就如同在打印对话框中的那样,在电子表格中Print类能够打印指定页,指定区域等。而在文字处理中,能够选择打印指定页,奇偶数页等等。在简报制作中,能够指定打印自定义播放幻灯片等等。

以下列举了Print类中打印范围和打印内容的方法:

public void setPrintAll()

设置打印全部

public void chooseCurrentPage()

设置选择打印当前页

public void setCopies(int copies)

设置用户定义的副本份数

public void setPrintPages(int index)

设置要打印的文档页面范围

public void setPrintItem(int index)

设置打印内容

public void setCustomshow(boolean isshow)

设置幻灯片对话框中是否是打印自定义播放的标志

public void setCustomshow(String show)

设置幻灯片对话框中打印自定义播放内容

public void setHandoutPages(String pages)

设置幻灯片对话框中讲义的页数

public void setSelectedRange(boolean selectedRange)

设置电子表格选定区域的标志

public void setRange(String rangeAddress)

设置打印电子表格的区域

public void setEntireBook(boolean entireBook)

设置电子表格选中整个工作簿的标志

下面提供一个完整的打印代码示例,设置电子表格打印属性和范围并进行打印。ddWorkbook;

}

public void printExample()

{

etActiveWorksheet();

Range range = ("A1:Q1000");

("MyPrint");

dd());

Workbook book = ().addWorkbook;

Document doc = ().getActiveDocument();

().insertTextAfter("this is a test!");

();

action = new TestAction();

(iapp);

}

etEnabled(false);

, .setEnabled(false);

, .setEnabled(false);

, .setEnabled(false);

, .setEnabled(false);

}

public void initCommandBar()

{

try

{

(true);

initMenuBar();

initToolBar();

}

catch(Exception e)

{

();

}

}

private void initMenuBar()

{

CommandBars bars = ();

elete();

ppend,

, "打开");

addOpenItem(openMenuItem);

ppend(

, , "关闭");

addCloseItem(closeMenuItem);

().append.setGroup(true);

().append;

().append;

().append.setGroup(true);

().append;

}

private void initToolBar()

{

CommandBars bars = ();

CommandBar testBar = ("test");

if (testBar != null)

{

(testBar);

}

testBar = ("test");

CommandBarControl openToolBarItem = ().append( , , "打开");

addOpenItem(openToolBarItem);

CommandBarControl closeToolBarItem = ().append( , , "关闭");

addCloseItem(closeToolBarItem);

}

private void addOpenItem(CommandBarControl control) {

etType();

if (type ==

{

etType();

if (type ==

{

etActiveWorkbook();

etActiveWorkbook();

etActiveWorkbook();

etActiveWorkbook().getWorksheets();

etActiveWorkbook();

etActiveWorkbook();

Worksheets sheets = ();

Worksheet worksheet = ();

Range range = ("B3:E5");

我们在先前的类层次图上可以了解到工作表中的类层次和结构。Worksheet 从Worksheets 处获得。而从 Worksheet 可以获得 Range(单元格区域)、Cell(单元格)、Rows(行对象)、Columns(列对象)等工作表组成对象,而且象Range 等的工作表组成对象也只能从Worksheet处获得。

以下列举了在Worksheet 中获得工作表的组成对象的一些API

Cell getActiveCell()

获取工作表中的活动单元格对象。

Range getActiveRange()

获取工作表中的活动单元格区域对象。

Range getRange(String rangeAddress)

Range getRange(int startRow, int startCol, int endRow, int endCol)

获得单元格区域对象。

Rows getRows(int startRow, int endRow)

Rows getRows(String rowsAddress)

获取行对象。

Columns getColumns(int startColumn, int endColumn)

Columns getColumns(String columnAddress)

获取指定列对象。

Cell getCell(int row, int column)

Cell getCell(String cellAddress)

获取单元格对象。

示例 2 :在当前活动工作表中设置数据和获取数据

Worksheet sheet = ().getActiveWorksheet();

(2, 3, "apple");

String value = (2, 3);

(3, 3, "my" + value);

工作表的一个很重要的功能就是存储和显示数据。从某中意义上看,它就是一个小型的数据库。Worksheet 提供了非常丰富的API 来存储和显示数据。不仅有设置单个单元格数值的API,还提供对以数组形式的批量数据进行存储的API。特别是当数据来自于一个数据库时,利用Worksheet 的API 可以提供简洁的操作。以下仅列举几个API,其它API可查阅永中Office的API 文档。

void setCellValue(int row, int column, String value)

给行号和列号指定的单元格设置内容。

void setCellValue(int row, int column, int[] values, boolean horizontal)

给以指定的行号和列号为起点的单元格区域设置内容。

注意:此方法对数据不作解析,直接保存。对于受保护单元格中的内容不作替换。

参数:

row起始行号

column 起始列号

values 数据

horizontal 数据的排列顺序,true为横排,false为竖排

关于获取单元格的值,Worksheet 提供了两个API:

Object getCellValue(int row, int column)

String getCellString(int row, int column)

第一个API 返回的Object 对象。如果单元格的值是整型,则Object 对象是Integer 型,类似的,浮点型对应于Double,字符串对应于String 等。

第二个API 返回的是单元格的值对象的String对象。

Worksheet 还管理其它一些功能对象,象批注、超连接,打印、页面设置和自选图形等。

即要在工作表上做这些操作,需要先从Worksheet获得功能对象或功能对象的管理器。如:

SsComments getComments()

获得批注管理器。

代码示例:

etActiveWorkbook()

.getWorksheets().getActiveWorksheet(); etActiveWorkbook()

.getWorksheets().getActiveWorksheet(); etActiveWorkbook()

.getWorksheets().getActiveWorksheet(); etActiveWorkbook();

etActiveWorksheet();

etActiveWorkbook();

etActiveWorksheet();

etActiveWorkbook()

.getWorksheets().getActiveWorksheet(); etActiveWorkbook()

.getWorksheets().getActiveWorksheet(); etActiveWorkbook()

.getWorksheets().getActiveWorksheet(); etActiveWorkbook().

getWorksheets().getActiveWorksheet();

String[] heading2= {"AA","BB","CC","DD"};

String[] items1 = {"panda","tiger","sheep","pet","dog","cat"};

int[] items2 = {4,2,6,3,7,6};

String[] items3 = {"Worksheet","Range","Rows","Column","Cell","Workbook"}; illRandom();

etActiveWorkbook();

etActiveWorksheet();

aste();

learContents();

erge();

}

public static void main(String[] args)

{

RangeTest rangeTest = new RangeTest();

();

}

}

行对象(Rows)

Rows。Rows类定义了为行对象设置行高,隐藏行和设置列属性等方法。行对象由工作表处获得。

先请看以下关于行对象的代码

示例:选定第三行到第五行并设置行高和插入行。

Workbook workbook = ().getActiveWorkbook();

Worksheets sheets = ();

Worksheet sheet = ();

etActiveWorkbook();

Worksheets sheets = ();

Worksheet sheet = ();

etActiveWorkbook();

Worksheets sheets = ();

Worksheet sheet = ();

etActiveWorkbook();

Worksheets sheets = ();

Worksheet sheet = ();

etActiveWorkbook();

Worksheets sheets = ();

etActiveWorkbook();

etActiveWorksheet();

etActiveWorkbook();

Worksheets sheets = ();

etActiveWorkbook();

Worksheets sheets = ();

Worksheet sheet = ();

etActiveWorkbook();

Worksheets sheets = ();

Worksheet sheet = ();

etActiveWorkbook();

Worksheets sheets = ();

Worksheet sheet = ();

etActiveWorkbook();

Worksheets sheets = ();

Worksheet sheet = ();

etActiveWorkbook();

Worksheets sheets = ();

Worksheet sheet = ();

etActiveWorkbook();

etActiveWorksheet();

etActiveWorkbook();

Worksheets sheets = ();

etActiveWorkbook();

Worksheets sheets = ();

Worksheet sheet = ();

etActiveWorkbook();

Worksheet sheet = ().getActiveWorksheet(); etActiveWorkbook();

Worksheet sheet = ().getActiveWorksheet();

;

设置单元格的链接区域:

void linkRange(String linkAddress)

参数为链接地址。

代码示例:

Workbook workbook = ().getActiveWorkbook(); Worksheets sheets = ();

Worksheet sheet = ();

etActiveWorkbook();

Worksheets sheets = ();

Worksheet sheet = ();

Cell cell = ("A1");

pg");

在单元格内插入影音文件:

void insertMultimedia(String name)

参数 name 为带完全路径的影音文件的文件名。

代码示例:

Workbook workbook = ().getActiveWorkbook(); Worksheets sheets = ();

Worksheet sheet = ();

Cell cell = ("A1");

etActiveWorkbook();

etActiveWorksheet();

;

}

public static void main(String[] args)

{

TestCell myTest = new TestCell();

();

}

}

第五章文字处理

本章将为您介绍永中Office文字处理的宏及二次开发。

本章内容共分为以下15节:

文档集合(Documents)

文档对象(Document)

正文对象(BaseText)

节对象(Section)

页眉(Header)、页脚对象(Footer)

脚注(FootNote)、尾注对象(EndNote)

文本范围对象(TextRange)

段落集合(Paragraphs)

段落对象(Paragraph)

自由表格集合(Tables)

表格对象(Table)

书签 (Bookmarks、Bookmark)

修订(TrackChanges、TrackChange)

文字处理的常用属性集(字体、段落、边框、底纹)

工具类(Utilities)

文档集合(Documents)

后缀名.EIO的文件是永中Office默认的文件格式,单个文件对应一个Workbook对象,每个文件可以包含多篇文档,管理当前文件中多个文档的集合,Office中定义了一个集合对象Documents。

获得Documents对象

从Workbook对象中可以获得当前文件所包含的所有文档的集合Documents。Workbook workbook = ().getActiveWorkbook();

Documents documents = ();

使用Documents对象

Documents是一个集合对象,管理着文档对象Document的添加、删除、获取、重命名等常用的操作。

用 addDocument方法可创建一篇新的空文档,并将其添加到 Documents 集合中。以下示例在当前集合文件中创建一个空文档,并显示新文档的名字。

Workbook workbook = ().getActiveWorkbook();

Documents documents = ();

Document document = ();

说明:当使用addDocument方法创建的空文档,返回的是一个默认格式的名字。格式如下:以字符串“文档”为前缀,后面加上一个整型数字,数字从1开始逐步累加。如“文档1”,“文档2”等等。

此外还可以通过参数创建一个指定名字的文档。

Document addDocument(String name)

参数name为指定的名字

通过getDocument(String name)方法可以得到指定名字的文档对象。参数name就是指定的名字。此方法返回一个Document对象实例。以下示例得到指定名字的文档,并选择整个文档的内容。

Workbook workbook = ().getActiveWorkbook();

Documents documents = ();

Document document = ("文档1");

();

说明:“文档1”就是先前创建过的文档的名字。有一点用户必须注意:参数name必须是当前文件中已经打开的文档的名字。如果文档不存在或为关闭状态,则返回Null。

我们经常在开发中使用当前激活的文档对象,可以通过getActiveDocument方法得到这个活动状态的对象。

以下示例删除刚才创建的文档。

Workbook workbook = ().getActiveWorkbook();

Documents documents = ();

("文档1");

closeDocument方法可以将文件中的某个文档关闭,使其暂时从Documents集合中移除。但是与removeDocument方法不同的是,关闭文档只是临时改变文档的显示状态,并不将其从文件中删除,可以通过openDocument重新打开这个文档。

以下示例关闭先前创建的文档。

Workbook workbook = ().getActiveWorkbook();

Documents documents = ();

("文档1");

文档对象(Document)

作为文字处理应用的实体,Document对象代表一篇文档,是Documents集合中的一个元素,可通过这个对象对文档内容添加删除修改或者得到当前文档的指定内容等。文

档的内容是十分丰富的,可以有

文本、图形、表格、样式等。

文档作为文字处理应用编辑存储

内容的载体,从体系结构可划分

为模型层和表现层两个部分。模

型层代表文档内容定义存储的框

架,一般由正文、段落、文本等

组成。表现层指的是文档布局显

示的一种方式,也就是我们通常

所说的文档的视图。一般有普通

视图、页面视图、大纲视图三

种。

我们写一篇文档内容通常是在四个页边

距以内的空白区域编辑操作,如左图所

示,这个空白区域称为正文编辑区域,

BaseText对象负责管理着这个编辑区

域。我们在编辑复杂文档如用户手册时通常还需要在文档每页的顶部区域显示每个章节的标题,在页面的底部位置显示每页的页码,这个时候就可以用到文档的页眉和页脚功能区域。页眉是文档中每个页面页边距的顶部区域,页脚即是这个页面的底部区域,他们可以在每页显示相同的内容。页眉编辑区域用Header对象表示,

而Footer对象代表某一个页脚编辑区域。有时为了给文档中特定的文本提供解释、批注以及相关的参考资料,可用脚注尾注功能进行标识。通常可用脚注对文档内容进行注释说明,而用尾注说明引用的文献。FootNote对象代表一个脚注区域,尾注编辑区域则用EndNote表示。通常一篇文档可以有多个脚注、尾注用于文档内容的注释说明,这些对象是在给正文某一段内容添加了说明标识后创建的。

为了满足用户个性化的要求,使文档更加美观,可以通过添加自选图形或文本框来丰富文档的排版。每个自选图形或文本框都是一个小的正文编辑区域,可以实现简单的文本编辑,我们这里用Shape对象表示一个自选图形或文本框,而要编辑内容时需使用文本框自带的编辑器,这个文本编辑器就是ShapeText对象,可从Shape对象得到。

以上六个编辑区域组成了文档编辑的入口,在这些区域中通过添加文本、图像或其他对象充实文档的内容。文本内容的组合根据其逻辑结构可划分为多个段落,每个段落代表逻辑上相关联的一段连续文本。段落对象是文本组成的重要逻辑对象,Paragraph代表一个段落,每个编辑区域都可以有多个段落。

下图清晰地表达了文档内容的基本模型:

作为文档内容基本模型的根节点,文档对象管理着整个文档的状态及样式,并且对文档的各种复杂操作都是从文档对象进入的,Document对象是以文档操作的入口定义的。所以创建一篇精美的文档必须从Document对象着手,Document对象在整个文字处理中的作用不言而喻。

获得Document对象

从文档集合Documents中可以得到指定的文档对象。

Workbook workbook = ().getActiveWorkbook();

Documents documents = ();

Document document = ("文档1");

如果某个文档处于活动状态,可以通过文档集合Documents中的getActiveDocument 方法得到当前激活窗口的文档对象。

Workbook workbook = ().getActiveWorkbook();

Documents documents = ();

Document document = ();

在文档集合中创建一个空文档或者打开文档也能返回一个Document对象,可以通过这个文档对象对一篇文档进一步地处理工作。

Workbook workbook = ().getActiveWorkbook();

Documents documents = ();

Document document = ("新文档");

使用Document对象

Document对象作为文字处理的入口,管理着整个文档的状态。通过上面文档模型图的介绍,我们知道文档的内容是由章节、编辑区域、段落、文本等以层次递进的方式组成的,可以这种方式获取文档的任意内容,添加、删除、更改。文字处理功能繁多,可对文档部分文本添加批注,插入图形、表格等来修饰文档的页面,为了方便用户对文档某些关键字段的跟踪定位,还可定义书签,创建索引目录等。这些功能都是文档级的,也就是创建的批注、图形、书签等由文档统一管理,但是如果将这些功能模块都放在Document对象中定义使用,势必会让Document对象臃肿难当,给用户的二次开发造成诸多不便。所以我们在封装API时用到了对象管理器这种新的模式。Document对象的功能主要划分为以下几种:

1、整个文档状态的管理。

永中Office是一个集成的办公软件,可以同时打开多个文档,但某一时刻只有一篇文档是被激活的,我们可以用isActivate ()方法判断文档是否处于活动状态,也可以使用activate, ()方法激活这个文档对象。以下示例依次创建两篇空白文档,然后激活第一篇文档,最后打印文档的状态。

Workbook workbook = ().getActiveWorkbook();

Documents documents = ();

Document doc1 = ("文档1");

相关文档