1二次开发的兼容性FAQ 11WPSOffice2012的二次开发开发和微软的office二次开发有什么异同 1.11模块对象的区别 WPSOffice2012的二次开发接口体系和微软Office的二次开发接口体系基本俣持 一致。包括:对狼树,即对象的组织构成、各对象代表的含义和微软Office对象均保 持一致;接口函数,即各对象的方法属性的名称和含义均与微软Office保持一致。不 同之处主要表现在两个方面:模块程序的对象名称和枚举常量的名称。 微软Officc和WPSOfficc各模块的对象名称对应关系如下 文字模块:word.Application wps.Application 表格模块:ExcelApplication etapplication 演示模块:PowerPoint.Application wpp.Application 具体使用时,只需要替换对应的对象名称即可,如下代码: 下面的代码可以创建一个微软word进程 Setapp=createObject("Word.Application") 下面的代码可以创建一个WPS文字进程 Setapp=createObject("wpsApplication") 1.12枚举常量的区别 枚举常量通常山现在API方法的参数或API属性的赋值上,微软Office和WPS Office各模块的对象名称对应关系如卜: 公用层: mso ks 文字模块:wd wps 表格模块:xl 演示模块:p wpp 具体使用时,替换对应的名称或使用枚举常量对应的数值,也可以在WPS的VBA 环境中查找对应的枚举常量确认其存在而且数值和微软OFFICE的一致 下面的代码可以打印当前页: WORD的代码:ActiveDocument.PrintOutRange:=wdPrintCurrentPage WPS的代码:ActiveDocument.PrintoutRange:=wpsPrintCurrentPage 也可以用对应的数值来同吋支持WORD和WPS,如下: ActiveDocument.PrintOutRange:=2'注释枚举常量wdPrintCurrentPage=2 113commandbars调用的区别 commanders接口API在微软wORD)的二次开发中可以这样引用 application.commandbars也可以这样引用document.commandbars commandbars接口API在WPS文字的二次开发中只能这样引用: oplication.commandbars,对于微软的document.commandbars引用,可以替换成 documentapplication.commandbars 12WPSOffice2012的接口类对象和对应的DLL文件 对象 接口 对应文件(Wps安装目录) WPS文字 WPS \office\wpscoredll WPS表格 ET \office\applogic.dll WPS演示 WPP \offices\wppcoredll 公用层对象 KSO \office\kso.dll adin机制IDTExtensibility22 \office\ksaddndrdll 13原有的与WPSOffice2003WPS2003)、WPSOffice2002WPS2002) WPSOffice2005(WPS2005)WPSOffice2007(2007),WPSOffice 2009(2009)结合的第三方程序,可以直接和WPSOffice2012结合运行 吗? WPS2012是与WPS2005、WPS2007、WPS2009完全兼容的版本,与wPS2003 WPS2002不完全兼容。 WPS2003、WPS2002的内核“KingsoftWPS.0ObjectLibrary"、“KingsoftET1.0 ObjectLibrary”、“KingsoftWPP2003ObjectLibrary WPSOffice005的内核“KingsoftWPS2.0ObjectLibrary”、“Kingsoftet2.0 ObjectLibrary"、“KingsoftWPP1.0ObjectLibrary” WPSOffice2012、WPSOffice2009、WPSOffice2007的内核“KingsoftWPS20 ObjectLibrary”、“KingsoftET2.0ObjectLibrary”、“KingsoftWPP2.0ObjectLibrary” 14原有的与WPSOffice2003或者WPSOffice2002结合的第三方程序,需 要做什么改动才能正常和WPSOfIice2012结合运行? 使用ⅤB编写的程序,需要将引用库改为升级后的类型库。并将二者接口有差别 的部分进行修改,然后重新编译 使用VC编写的并用到CLSID的程序,需要重写这些CLSID。并将二者接冂有差 别的部分进行修改,然后重新编译。 15调用WPs接口AP方法时要注意Variant参数类型的传递。 wPS接口中的Variant参数类型,在使用时比较严格。建议无论使用何种语言,在传 递Variant参数类型时,都要将其变量转挨为Variant再进行传递。 VC调用ET时,传递Variant参数的代码片断: COleVariantvarFileName(“C:}test.xls”); VARIANTvarFALSE=0; varFALSEvt=VTBOOL. ∥{误调用时会出错 //varFALSEboolVal=false ∥正确:正常调用 varFALSE.boolVal=VARIANTFALSE VARIANTvarEMPTY=(; kset:Workbookwb(wbs.Open(varFileName,varEMPTY,varFALSE,varNull varNull,varNull,varNull,varNull,varNull,varNull,varNull,varNull,varNulD)) 16通过注册表修改宏代码的安全级别。 通过程序打开一些有宏代码或控件的文档,如果客户端的红安全性设置人高就会导致 宏代码或控件无法加载,给应用带来很大麻烦。可以通过通过注册表来修改客户端的 宏安全设置。 通过VBS脚本实现的代码如下: Dimmyshell SetMyshell=WScript.CreateObject"WScript.She")"创建WScript对象 Dimlevel Level=InputBox("请输入宏的安全级别,1为低,2为中,3为高,4为非常高","设 置宏的安全级别",2 IflevelThen MyshellRegwrite "HKEYCURRENTUSERSoftwareKingsoftOffice6.WppApplication Settings\VbaSecurityLevel",Level'修改WPS演示模块的宏安全级别 MyshellRegWrite "HKEY_CURRENTUSERISoftwareKingsoftiOffice\6.0\wpsApplication SettingsVbaSecurityLevel"!Level"修改WPS文字模块的宏安全级别 MyshellRegWrite HKEYCURRENTUSERISoftware\Office\.let\Application SettingsKDESecurityLevel",evel'修改WPS表格模块的宏安全级别 MsgBoxDonc! Endit 2二次开发文字部分FAQ 提示 各对象、方法和属性的详细使用方法,请参阅WPSAPI帮助。 对界面控件的操作都是在经典界面下完成的由于WPS2012界面使用Qt重构了 界面代码,所以一些涉及到界面控制的API暂时不能在WPS2012界面中使用。 ●以下示例代码都用ⅤB编写,使用其它语言的开发者,请自行做相应转换。 21如何启动WPS文字模块? 如果wPS文宇模块已经启动,可以使用Getobject获得这个进程: SetwpsApp=GetObject(,"WPS.Application") wpsApp.Visible=True 如果wPS尚木启动,可以使用CreateObject来产生个新进程 Setwps=CreateObject("WPS.Application") wpsApp.Visible=True 22如何退出WPs文字模块? wpsAppQuitSaveChanges:=wpsSaveChanges,OriginalFormat:-wpsWPSDocument RouteDocument:=True setwpsApp=Nothing 23如何得到WPs中的工具栏数? 下面的例子显示应用程序所有工具栏的数目。 MsgBoxwpsAppApplicationCommandBarsCount 下面的例子使工具栏的第一项不可见 wpsApp.CommandBars.Itcm(1).Visible=Falsc 24如何隐藏工具栏? 用Commandbarse(Index)可以直接返回个CommandBar对象。 使用下面的语句可以将第一个工具栏隐藏 Application.CommandBarsItem(1).Visible=false 25如何使工具栏的按钮失效? 下面的例子切换第一条工具栏第一项按钮的有效性。 DimbarAsWPS.CommandBarControls Setbar=wpsAppCommandBars(1)Controls bar(1)Enabled=Notbar(1)Enabled 2.6如何获得一个文档? 下例通过索引号获取第个文栏。 SetwpsDoc=wpsAppDocuments(1) 27如何打开wps文档? 在获得WPsapplication对象之后,就能对wPS进行控制,下面的例子中将以只读 方式打开·个wPS文档,并激活此文档,如果文档不存在,将出示提示信息 wpsAppDocuments.OpenFileName:="E∴\散文.wps",ReadOnly:=true wpsApp.activatedocumentActivate 28如何关闭一个文档? 关闭第一篇文档。 wpsAppDocuments(1).Close 29如何保存一个文档? 如果活动文档在上次保存后进行了修改,下面的例子将保存活动文档。 IfActiveDocument.Saved=FalseThen ActiveDocument.Save Endif 210如何获得或修改当前用户名? 下面的例子设置应用程序的用户姓名(对应于菜单条"工具">"选项">"用户">"姓名") wpsApp.USerName="wpsuser 下面的例了显示应用程序的用户名 MsgBoxwpsAppUserName 7 211如何在当前文档中添加一个表格? 下面的例子在文章开头添加一4行4列的表格,并在最后一个单元格里写上"需要 写些什么”字样 DimrngTblAsWPSRange DimwpsTableAsWPSTable Setr=ActiveDocument.Range(0,0) SetwpsTable=ActiveDocument.Tables.Add(r,4,4) wpsTable.cel(4,4).Range.Text="需要写些什么 212如何获取表格的行和列? 下面的例子将获得第一个表格的行和列 DimmytableAsWPSTable Setmytable=wpsApp.ActiveDocument.Tables(1) MsgBox"第一个表有"&mytableColumns.Count&"列"&mytableRowS.Count& 213如何选中一个表? 下面的例子将当前活动文档的第一个表选中。 ActiveDocument.Tables(1).Select 214如何修改一个表格的某个单元格的内容? 下面的例子对活动文档第一个表格的第一个单元格的内容进行显示及修改。 DimmytableAswPstable Setmytable=ActiveDocument.Tables(1) MsgBox"原来(1,1)单元格的内容是:"&mytable:cl(1,1)range.text"缺省表示指 定单元格内容 mytablecell(4,1)range.text="金山文字 MsgBox"修改后是:"&mytable.cl(1,1)Tange:text ablecell(l,1)Range.Text="WPSOffice MsgBox"再次修改后是"&mytablecell(1,1)Range,ext 215.如何设置一个表格的单元格的高度和宽度? 下面的例子将活动文档第一张表格的所有单元格的高度和宽度设置都设为 200*0.lmm。 DimmytableAswPstable Setmytable=wpsAppActiveDocument.Tables(1) iCols=mytableColumns.Count RowsmytableRows.Count Fori=lToirows mytablecell(i,1).Height=200 Forj=1Toicols mytablecell(1,j).Width=200 Next 下面的例了将活动文档的第·个表格的所有单元格的宽度设为设为400*0.1mm。 DimmytableAsWPSTable Setmytable=ActiveDocument.Tables(l) num=mutableColumns.Count Forj=ITonum mytablecell(l,1.Width=400 Next1 216表格增加一行之后,要获取增加表格的内容,必须重新给表格变量赋值 Tb是一个4行4列的表 DimTbastable SetTb=ActiveDocument.Tables.Item(1) 1b表格添加一行 TbRows.Add 重新给表格变量赋值 SetTb=ActiveDocument.Tables.Item(I) 再对新添加的行进行操作,否则会出错 TbCell(5,4)Range.Text=5,4 217如何添加一个书签? 下面的例子将在当前文档中添加书签“我”,书签的内容为从第三个字符到第五个 字符。 DimrAsWPSRange Setr=wpsAppActiveDocumentRange r.SetRangeStart:=3,End:=5 wpsApp.ActiveDocumentBookmarks.AddName:="w",Range:r 218如何替换一个书签的内容? 下面的例子判断名为"temp"的书签是否存在于活动文档中,如果存在则替换该书 签的内容 IfActiveDocument.BookmarksExists("temp")=TrueThen ActiveDocumentBookmarks(temp").range.text="ReplaceText EndIf 219如何获取和设置默认打印机? 本示例获取默认打印机的名字 MsgBox“默认的打印机为:&Application.ActivePrinter 本示例将LPTl端口的本地HPLaserjet6打印机设置为活动打印机。 Application.ActivePrinter="HPLaserJet6localonLPTI: 220如何打印一篇已打开的文档? 木示例以默认设置打印活动文栏的所有页。 ApplicationActiveDocument.PrintOut 本示例打印了活动文档中的1到3页。 ApplicationActivcDocumcnt.PrintOutFrom:=1",To:=3 本示例按照活动文档的75%大小进行打印。 ApplicationActiveDocument.PrintOutPrintZoomPaperWidth:=0.753 (8.5*1440),PrintZoomPaperHeight:=0.75*(11*1440) 2.21如何获取和设置某些文字的字体属性? 本示例获取和设置选中部分的字体名称和大小。 WithApplicationSelectionRange.Font MsgBox"字体名称"&Name&vbCrlf&"字号:"&.size MsgBox"即将改变字体名称和字号! Name="华文行楷 e=20 MsgBox"改变后的内容如下:"&vbCrlf&"字体名称"&Name &vbCrLf&"字号:"&.Size Endwitl 10