1、永中Office二次开发技术手册第 1 页 永中Office 二次开发技术手册前言一、宏和二次开发在实现办公自动化的今天,我们经常会碰到这样一个问题,在使用办公软件时总要重复流程一样的相同操作,这使工作变得繁琐而枯燥,能不能提供一种方法,使这些相同操作能够通过一个命令自动完成或者使用更为简单的途径得到呢?宏因此而产生了。宏是指用一个符号名称所代表的一段程序代码,将定义代码段按实际参数进行加工,形成实际代码直接插入程序的执行序列中。许多应用程序具有建立宏的功能,它们可以把操作人员为解决某项问题而执行的一些操作命令记下来,形成一个文件段,并且用一个符号表示。当同样的问题重复执行时,只要输入代表这一
2、系列命令的宏命令即可。这些代码可以是由用户编写,也可以通过办公软件提供的宏录制功能记录下简单任务而生成。结合自己的需要,利用宏充分开发应用程序潜在的功能,可以获得使用上最大限度的满足,这也就是通常意义上的二次开发,即利用宏语言扩展宿主程序的功能、集成不同类型的数据以实现办公软件在具体事件中的解决方案。永中Office为您提供了非常丰富而全面的宏API(API 表示应用程序接口),通过这些API您可以非常自如操作永中 Office。并且使您在实现自定义的解决方案时更加得心应手,更灵活的发挥永中Office 的集成优势。二、本手册结构第一部分为二次开发环境。永中Office的二次开发,我们推荐,一
3、是利用永中Office自带的宏编辑器进行开发,二是可以在Eclipse上开发。第二部分为应用和API我们在第2章给出了二次开发结构,也即永中 Office二次开发的类层次图。有了该类层次图,就可以了解永中Office二次开发中的层次和对象了。第3章为总控,这里有二次开发应用的总入口第4章为电子表格应用第5章为文字处理应用, 自由表格也在这一章第6章为幻灯片演示第7章为公共组件,包含2个主要组件:自选图形和图表第三部分为其它语言调用与应用第8章为永中Office COM组件开发第9章为嵌入浏览器样例第10章为嵌入Java 应用程序样例附录附录一为永中Office 二次开发技巧集,我们列举了一些二
4、次开发技巧附录一为永中Office 二次开发FAQ永中Office二次开发技术手册第 2 页 我们希望起到抛砖引玉的作用。详细的API说明可以参见永中Office的API文档。永中Office二次开发技术手册第 3 页 第一章 二次开发环境1.1宏编辑器中进行二次开发1、从菜单“工具”“宏 ”“宏编辑器”,打开宏编辑器。2、在宏编辑器中,从菜单“ 插入”“模块”,新建一个模块。3、在模块中,可以添加宏,通过宏,就可以操作永中Office。4、示例:将下面的宏代码添加到模块中,宏的名字是“insertValue ”。样例1.1.1/在当前的工作表中,往单元格(2,3 )中设值“apple ” 。
5、void insertValue()Application.gotoProduct(GlobalConstants.SPREADSHEET);Workbook workbook = Application.getWorkbooks().getActiveWorkbook();Worksheet sheet = workbook.getWorksheets().getActiveWorksheet();sheet.setCellValue(2, 3, “apple“);注意:永中Office的宏语言是JAVA。在模块中添加宏时,请不要添加方法的修饰符,如 public, private,prot
6、ected,static ,final 等。永中Office的宏只能在永中Office自己的文件格式(.eio)中使用,保存为微软格式文件时宏代码会丢失。1.2使用Eclipse 进行二次开发1、 下载并解压Eclipse包。2、 在Eclipse目录下点击Eclipse可执行文件,启动Eclipse。3、 在Eclipse中,新建一个项目:在菜单“File” “New”“Project.”弹出“New Project”对话框,在列表中选中 “Java Project”选项,下一步,给定一个项目名,假设项目名为 “example”,完成,这样就建立了一个名为 “example”的项目。4、在E
7、clipse 的“Package Explorer”里,选中“example”节点,右键弹出菜单,点击 “Properties”菜单项,在弹出的“Properties ”对话框中选中左边的 “Java Build Path”,选中对话框右边的第三项“Libraries” 页面,点击“Add External Jars.”按钮,将永中Office 按装目录下的“Yozo_Office.jar”添加进编译环境。这样就可以应用永中 Office 的开发包对永中Office 进行二次开发了。5、在Eclipse 的“Package Explorer”里,选中“example”节点,选择菜单“File
8、”-“New”-“Class”弹出“New Java 永中Office二次开发技术手册第 4 页 Class”对话框,填写类名称,假设为“MyTest”,点击完成按钮,这样就在项目“example”中建立了一个名为 “MyTest”的新类。永中Office二次开发技术手册第 5 页 第二章 二次开发对象层次结构API是Application Programming Interface(应用程序编程接口)的缩写,即一个主应用程序的开发者提供给其他开发者使用的服务和功能。这意味着API 允许一些外部程序访问提供 API的程序,即另外的程序通过主应用程序的API而使用某一个子程序的功能。许多大的应用
9、程序都提供了API 供二次开发者使用,如各种程序开发语言、各种操作系统及办公软件等。API不仅仅可以被外部应用程序使用,许多大型应用程序也使用API 以便于自身程序的一部分与另一部分联系。如果一套服务或帮助功能一个大应用程序的内核已被建立,那么,一个做完了的API就可以使开发应用程序的剩余部分变得十分轻松;此外,将其中一部分常用而且稳定的API开放给用户,用户在此基础上可以根据自己的需要开发出更加强大和个性化的功能,产品功能在适用过程中得到扩展,与用户的交互性也因此而更强。基于跨平台操作的特性,永中Office充分考虑到用户对功能扩展的要求、不同需求对解决方案的要求及个性化等其它各方面的要求,
10、在其内置的宏编辑器中提供了一整套实现内部功能的API供用户调用;此外,永中 Office宏编辑器还支持导入JAVA的类库以使用JAVA 语言强大而丰富的类。任何API都是基于对象的操作,在操作对象的基础上实现功能。永中Office二次开发的API即相当于JAVA 语言中的方法,既可以是对某一对象单个属性或事件的控制和操作,也可以是对整个对象进行的操作,从而实现形式多样的功能。2.1单实例和多实例永中Office二次开发体系支持单实例和多实例两种方式。单实例方式通常在永中Office的宏编辑器中使用,多实例方式通常在外部调用永中Office 时使用。单实例和多实例在代码中的差别体现在创建永中Of
11、fice实例时,下面是示例代码:单实例示例:/创建永中Office桌面应用单实例示例Application.getApplicationInstance()多实例示例:样例2.1.1/创建永中Office桌面应用多实例/永中Office 初始化参数AppParameters appParams = AppParameters.getInstance();/创建永中Office实例ApplicationFactory.createInstance(appParams);单实例和多实例除创建永中Office实例外,在具体功能性API调用方面没有差别。更多单实例和多实例的操作见C3.1。注意:本手册
12、中为方便描述,除明确说明外,其它代码均以多实例方式描述。永中Office二次开发技术手册第 6 页 2.2二次开发对象层次结构永中Office API的对象体系是基于一种继承的结构,要访问一个对象,必须清楚该对象在整个对象体系中的位置,通过JAVA的对象运算符“.”从包含该对象的最外层开始,由外及内逐层找到其子对象,一直到所要访问的对象。如要访问文件名为“文件1.eio”的电子表格文档中“ 工作表1”的“A1”单元格,需按如下格式书写:Application.getWorkbooks().getWorkbook(“C:/文件1.eio “).getWorksheet(“工作表1“).getCe
13、ll(“A1“);为了使代码简洁,可以使用访问对象的简化格式。如果某对象的父对象是当前对象,那么就可以直接对其子对象进行访问,例如以下是一个先打开一个文档然后对其子对象进行操作的代码示例:样例2.1.2/设置指定单元格内容/新建电子表格应用Workbook workbook = app.getWorkbooks().addWorkbook(GlobalConstants.SPREADSHEET);/获得电子表格应用文件中的工作表1Worksheet worksheet = workbook.getWorksheets().getWorksheet(“工作表1“);/在当前工作表中选择单元格“A
14、1”Cell a1 = worksheet.getCell(“A1“);/在A1单元格中设值a1.setValue(“apple“);/在当前工作表中选择单元格“A2”ActiveWorksheet.select(“A2“);/当前单元格设值ActiveCell.setValue(“Lenny“);在永中Office的宏中,把所有具有相同属性和方法的,在对象体系中位于同一层次的对象划归为一个对象类,例如,在电子表格中,工作表的每个单元格都是一个Cell对象,这些Cell对象共同构成了Cell对象类。永中Office宏编辑器提供的所有对象层次的顶部是Application,所有这些对象的访问都必
15、须从Application 开始。以下是永中Office宏编辑器常用对象的层次结构图。永中Office二次开发技术手册第 7 页 永中 office二次开发对象层次图Windows Window窗体集合 窗体Options应用设置CommandBarCommandBarsApplication永中Office单实例工具栏工具栏集合WorkbookWorkbooks集成文件集成文件集合PDFAttributePDF文件属性Versions版本管理Charts Chart图表图表集合Worksheets Worksheet工作表电子表格工作表集合Documents DocumentWorkbook
16、集成文件 文字处理文档文字处理文档集合Presentations Presentation简报简报制作文档集合Tables Table表格表格集合FileProperties文件属性ShapeShapes自选图形自选图形集合集合对象 单个对象IApplicationApplicationFactiroy永中Office多实例永中Office多实例管理器永中Office实例永中Office二次开发技术手册第 8 页 电子表格对象层次图Characters字符属性FontAttributeCell字体属性单元格FillAttribute列操作集 填充属性ColumnsFormatCellAttri
17、bute格式属性控件管理器ComponentManagerBorderAttribute边框属性Names名称管理器 ConditionalFormating条件格式Print打印设置 ConditionalFormationgDataRange条件格式设置Rows单元格区域WorksheetSortProperties排序设置工作表行操作集 TextSplittingProperties文本分列设置ValidationPropertiesSsPageSetup数据校验设置页面设置ScenariosSsCommentsScenario方案集合 方案Comment批注集合 批注Hyperlink
18、SsHyperlinks超链接超链接集合SsShape自选图形SsShapes自选图形集合集合对象 单个对象永中Office二次开发技术手册第 9 页 文字处理二次开发对象层次图集合对象 单个对象SectionDocumentParagraphParagrahpsBaseText文档节段落集合段落正文编辑区域FootNoteOptionsFootNote脚注属性(正文管理)脚注编辑区域EndNoteOptionsEndNote尾注属性(正文管理)尾注编辑区域Header页眉编辑区域Footer页脚编辑区域TextRange文本区域对象TableTables表格集合 表格Styles Style
19、样式集合(文档管理)样式Function具体功能点永中Office二次开发技术手册第 10 页 TabStops TabStopPageBorderAttributeBorderAttributeParagraphAttributeFontAttributeWordBulletLevelWaterAttributeFillAttributeGradientAttributePatternAttributePictureAttributeTextureAttribute字体属性(样式格式)段落属性(样式格式)边框属性(样式格式)页面边框属性项目符号与编号属性(样式格式)制表位集合(样式格式)制表
20、位水印属性填充属性渐进色填充效果属性图案填充效果属性图片填充效果属性纹理填充效果属性Hyperlink超链接属性ShadingAttribute底纹属性Style样式永中Office二次开发技术手册第 11 页 替换对象的格式查找匹配的制表位集合查找替换当前选取的多个自选图形WpShapeRangeReplacementFindTabStopsFindReplaceBookMarksFunction BookMark具体功能点 书签集合(文档管理 )书签TrackChangesTrackChangeFields Field修订集合(文档管理)域对象集合 域对象WpComments Commen
21、t批注集合(文档管理)批注PenMarkManager手写批注(文档管理)PageNumberAttribute页码属性Column分栏(章节管理)WpPageSetup页眉设置(章节管理)Index索引IndexEntry索引项TableOfContent目录Barcode条码BarcodeInfo条码信息属性修订永中Office二次开发技术手册第 12 页 WpShapesMailingLabelMailMergeWordCountWpShape标签邮件合并字数统计(文档管理)FindReplaceFindTabStopsReplacement自选图形管理器(文档管理)自选图形查找替换查找
22、匹配的制表位集合替换对象的格式单元格ParagraphsFindReplaceFindTabStopsReplacementWpShapeRange自选图形管理器(文档管理)某个自选图形当前选取的多个自选图形查找替换查找匹配的制表位集合替换对象的格式FindReplaceFindTabStopsReplacementWpShapeRange自选图形管理器(文档管理)某个自选图形当前选取的多个自选图形查找替换查找匹配的制表位集合替换对象的格式RowsColumnsRowCellsCell表格行集合表格列集合Column表格行表格列TableAttribute表格属性CellAttribute单元
23、格属性单元格集合表格Table永中Office二次开发技术手册第 13 页 简报制作二次开发对象层次图Presentation Slides Slide自选图形对象层次图Shapes ShapeShapeTextConnectFormartFillAttributeThreeDFormartPictureFormartLineFormartPictureAttributePatternAttributeGradientAttributeTextureAttributePatternFormart集合对象 单个对象简报 幻灯片集合 幻灯片集合对象 单个对象自选图形集合 自选图形图形对象文本设置连
24、接线设置填充属性三维格式图片格式线型对象格式图片属性渐进色属性图案属性纹理属性线型图案格式永中Office二次开发技术手册第 14 页 第三章 总控本章将为您介绍永中Office总控部分的宏及二次开发。本章内容共分为以下6节:3.1 Application类和 ApplicationFactory 类3.2 文件管理器(Workbooks)3.3 文件(Workbook)3.4 打印(Print)3.5 对话框(Dialogs)3.6 菜单和工具条 (Commands)永中Office二次开发技术手册第 15 页 3.1 Application类和ApplicationFactory 类App
25、lication类是用作为单实例的API调用的总入口,而ApplicationFactory类是用作为多实例的API调用的总入口。在多实例情况下,从 ApplicationFactory 总入口处可以获得相当于Application类的接口,即IApplication接口。下面是在多实例情况下的一个应用示例的代码:样例3.1.1/新建一个永中Office实例,且主窗体不显示,获得打印机并打印工作表/在永中Office启动之前需要设置的参数AppParameters params = AppParameters.getInstance();/启动参数设置隐藏永中Office主窗口params.h
26、ideMainFrame();/通过ApplicationFactory 类获得 IApplication 接口IApplication iapp = ApplicationFactory.createInstance(params);/由IApplication 接口获得一个添加的Workbook对象,Workbook book = iapp.getWorkbooks().addWorkbook(GlobalConstants.SPREADSHEET);/获得当前工作表Worksheet sheet = book.getWorksheets().getActiveWorksheet();/在
27、工作表的一个区域“B3:D6“设值sheet.getRange(“B3:D6“).setValue(“abc“);/获得工作表的打印机对象Print print = sheet.getPrint();/设置打印机的等待打印对话框为FALSE,即隐藏等待打印对话框print.setWaitingDialogVisible(false);/打印工作表print.printOut();System.out.println(“print finish!“);/关闭永中Office实例iapp.exitSystem();上述示例在单实例情况下的代码如下:样例3.1.2/样例:启动永中单Office实例,
28、且主窗体不显示,获得打印机并答应工作表/启动永中officeApplication.getApplicationInstance();Application.setMainFrameVisible(false);/由Application 类获得一个添加的Workbook对象,Workbook book = Application.getWorkbooks().addWorkbook(GlobalConstants.SPREADSHEET);/获得当前工作表Worksheet sheet = book.getWorksheets().getActiveWorksheet();/在工作表的一个区
29、域“B3:D6“设值永中Office二次开发技术手册第 16 页 sheet.getRange(“B3:D6“).setValue(“abc“);/获得工作表的打印机对象Print print = sheet.getPrint();/设置打印机的等待打印对话框为false ,即隐藏等待打印对话框print.setWaitingDialogVisible(false);/打印工作表print.printOut();System.out.println(“print finish!“);/退出永中OfficeApplication.exitSystem();3.2 Application类和IAp
30、plication类Application类是一个静态类,类中的API均可直接调用;而IApplication类需要通过ApplicationFactory获得。Application类与单实例的永中Office 应用实例对应,IApplication类与多实例的永中Office应用实例对应。Application类和IApplication类在API方面的主要区别在于Application类中包含了初始化永中Office实例(单实例)的API,而在永中Office内部功能API方面保持一致。由于Application类和IApplication类在永中Office内部功能 API方面保持一致
31、,下面将以Application类为代表,详细说明其功能。注意:手册中的Java示例大多用IApplication类做说明,如需在单实例情况下运行,请修改入口部分。IApplication类在永中Office 内部功能方面定义了对整个永中Office应用程序进行操作、控制、管理的方法。通过它可以获得文件管理器,窗口管理器,工具条管理器等等。该类的方法都是静态方法,所以无需生成该类对象而直接通过类来调用其中方法。先看以下几个关于Application类和IApplication 类的代码:样例3.2.1_1/新建JFrame 和永中office 单实例,并把这实例放入JFrame容器中JFram
32、e frame = new JFrame();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/启动永中officeApplication.createInstance(frame.getContentPane();frame.add(Application.getInstance();frame.setSize(800, 600);frame.setVisible(true);与之对应的多实例代码样例3.2.1_2/新建JFrame 和永中office 实例,并把这实例放入JFrame容器中JFrame frame = new JFr
33、ame();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/永中Office 初始参数AppParameters appParam = AppParameters.getInstance();/设置承载永中Office的容器appParam.setContainer(frame.getContentPane();永中Office二次开发技术手册第 17 页 /创建永中OfficeApplicationFactory.createInstance(appParam);frame.setSize(800, 600);frame.setVi
34、sible(true);样例3.2.2_1/在applet中启动永中office单实例public class SCreateOfficeInApplet extends JAppletpublic void start()/启动永中officeApplication.createInstance(getContentPane();/将永中Office添加到Applet中getContentPane().add(“Center“, Application.getInstance();样例3.2.2_2/在applet中启动永中office实例public class MCreateOffice
35、InApplet extends JAppletpublic void start()/永中Office初始参数AppParameters appParams = AppParameters.getInstance();/设置承载永中Office的容器appParams.setContainer(getContentPane();/创建永中OfficeApplicationFactory.createInstance(appParams);下面列举了Application中启动永中office的相关方法:/在JApplet或者 JFrame中调用,新建一个永中Office实例。public s
36、tatic void createInstance(Component component)/在JApplet程序中调用 ,返回一个永中 Office的实例。public static Container getInstance()/在Application程序中调用,返回一个永中Office的实例。public static Container getApplicationInstance()通过Application或IApplication可以获取Workbooks(文件管理器)、 CommandBars(工具条管理器)、Windows(永中Office窗口对象)等,如同类层次图显示的那
37、样,所有的二次开发API的调用都要经过 Application或IApplication入口。Application或IApplication类也提供了一些获取永中 Office应用程序相关信息的方法,如获取版本号,默认存盘路径,安装路径等。请看下面两个样例:永中Office二次开发技术手册第 18 页 样例3.2.3/启动永中office应用程序并新建一电子表格文件/永中Office 初始参数AppParameters appParam = AppParameters.getInstance();/创建永中Office实例IApplication iApp = ApplicationFact
38、ory.createInstance(appParam);/获取文件管理器Workbooks books = iApp.getWorkbooks();/新建一电子表格文件books.addWorkbook(GlobalConstants.SPREADSHEET);样例3.2.4/获得永中Office安装路径/永中Office 初始参数AppParameters appParam = AppParameters.getInstance();/创建永中Office实例IApplication iApp = ApplicationFactory.createInstance(appParam);/永
39、中Office 安装路径String installPath =iApp.getSystemPath(GlobalConstants.TPYE_EIO_INSTALL_PATH);System.out.println(“永中Office安装路径是:“ + installPath);下面列举了Application和IApplication中获取一些对象的相关方法:/获取永中Office文件管理器public static Workbooks getWorkbooks()/获得菜单和工具条的管理器public static CommandBars getCommandBars()/返回永中Off
40、ice软件的版本号public static String getVersion()/获取永中Office的安装路径public static String getSystemPath()/获取永中Office文件的默认存盘文件夹的路径public static String getFileSavePath()Application和IApplication类还提供了一些设置永中office界面的方法,除了通过得到工具条管理器来添加删除工具条外,还有如显示或隐藏任务面板,设置UI属性等,通过Application和IApplication类还能设置永中 office中的某些菜单项是否可用等。样
41、例3.2.5/启动永中office应用程序,隐藏文件菜单/永中Office 初始参数AppParameters appParam = AppParameters.getInstance();/设置不保存自定义动作appParam.disableCustomizeSave();/创建永中Office实例IApplication iApp = ApplicationFactory.createInstance(appParam);/获得文件菜单永中Office二次开发技术手册第 19 页 CommandBar fileMenu = iApp.getCommandBars().getCommandB
42、ar(“文件“);/隐藏文件菜单fileMenu.setVisible(false);以下列举了Application中其他一些设置office界面等的常用方法:/显示或隐藏任务面板public static void setTaskPanelVisible(int paneID, boolean show)设置永中Office 的UI 属性public static void setUIStyle(int flags)/设置是否显示编辑栏public static void setFormulaBarVisible(boolean show)/设置是否显示状态栏public static v
43、oid setStatusBarVisible(boolean show)/设置永中Office菜单项可用或不可用public static void setActionEnable(int index, boolean enabled)/定位到某个应用public static void gotoProduct(final int type)相对应于以上这些设置方法,还有相应的获取属性或者状态的方法,如:/通过面板ID判断面板是否显示public static boolean isTaskPaneVisible(int paneID)/是否显示编辑栏public static boolean
44、 isFormulaBarVisible()/是否显示状态栏public static boolean isStatusBarVisible()/判定某个菜单项是否有效public static boolean isActionEnable(int index)Application(IApplication)类作为永中Office应用示例的总入口,功能较多, API的详细功能描述请参照API说明。以下是一个完整的代码示例样例3.2.6import application.AppParameters;import application.ApplicationFactory;import ap
45、plication.IApplication;import application.constants.ActionNameConstants;import application.constants.GlobalConstants;import application.workbooks.workbook.Shapes;public class MyOfficeprivate IApplication iApp; / 永中Office实例public MyOffice()/ 创建永中Office实例永中Office二次开发技术手册第 20 页 iApp = ApplicationFactor
46、y.createInstance(AppParameters.getInstance();/ 添加文字处理应用iApp.getWorkbooks().addWorkbook(GlobalConstants.WORDPROCESSOR);public void setVisible()/ 设置不显示状态栏iApp.setStatusBarVisible(false);/ 设置不显示编辑栏iApp.setFormulaBarVisible(GlobalConstants.FORMULABAR_INVISIBLE);/ 设置隐藏导航面板iApp.setTaskPanelVisible(GlobalC
47、onstants.CURRENT_PANE, false);/ 设置文件打印菜单项不可用iApp.setActionEnable(ActionNameConstants.FILE_PRINT, false);/ 在应用中添加一艺术字“Hello Application“public void showHello()/ 获得自选图形集合Shapes shapes = iApp.getWorkbooks().getActiveWorkbook().getActiveShapes();/ 添加艺术字shapes.addWordArt(1, “Hello Application“, “宋体“, 1,
48、24, 250, 180, 400,320);public static void main(String args)MyOffice myOffice = new MyOffice();myOffice.setVisible();myOffice.showHello();永中Office二次开发技术手册第 21 页 3.3 文件管理器(Workbooks)application.Workbooks类对应于文件管理器,通过它可以添加、获取、保存文件等,因此,对文件进行的二次开发一般都会通过Workbooks这个类,Workbooks还能进行文件和byte数组的转换,这种方式很好的支持了文件在数
49、据库的上传和下载。先看几个对文件进行操作的代码样例3.3.1/添加一个文字处理文件/ 创建永中Office实例IApplication iApp = ApplicationFactory.createInstance(AppParameters.getInstance();/ 获得文件管理器Workbooks wbs = iApp.getWorkbooks();/ 添加文字处理应用wbs.addWorkbook(GlobalConstants.WORDPROCESSOR);样例3.3.2/打开一个文件/ 创建永中Office实例IApplication iApp = ApplicationFactory.createInstance(AppParameters.getInstance();/ 获取文件管理器Workbooks books = iApp.getWorkbooks();/ 通过管理器打开D盘下test.eio文件books.openWorkbook(“D:/test.eio“);/ 在控制台输出文