1 二次开发的兼容性FAQ
1.1 WPS Office2005的二次开发开发和旧版本WPS Office有什么区别?
答:WPS Office2005是完全重新开发的一款产品,其对象格式,设置方式和旧的WPS Office版本有所不同。对应的二次开发接口也有所调整。但大部分的二次开发接口和旧版本保持一致。
1.2 WPS Office2005的二次开发开发和微软的Office二次开发有什么异同?
答:WPS Office2005的二次开发接口体系和微软Office的二次开发接口体系基本保持一致。包括:对象树,即对象的组织构成、各对象代表的含义和微软Office对象均保持一致;接口函数,即各对象的方法属性的名称和含义均与微软Office保持一致。
1.3 原有的与WPS Office 2003或者WPS Office 2002结合的第三方程序,可以直接和WPS Office2005结合运行吗?
答:不行。WPS Office2005是全新的一个版本,其中的类型库已经升级。由原来“Kingsoft WPS 1.0 Object Library”、“Kingsoft ET 1.0 Object Library”、“Kingsoft WPP 2003 Object Library”分别升级为“Kingsoft WPS 2.0 Object Library”、“Kingsoft ET 2.0 Object Library”、“Kingsoft WPP 2.0 Object Library”
WPS Office2005二次开发接口中的对象树,基本保持和2003的一致,但由于WPS本身功能和内部元素结构的改变,个别接口有相应的调整。
1.4 原有的与WPS Office 2003或者WPS Office 2002结合的第三方程序,需要做什么改动才能正常和WPS Office2005结合运行?
答:使用VB编写的程序,需要将引用库改为升级后的类型库。并将二者接口有差别的部分进行修改,然后重新编译。
使用VC编写的并用到CLSID的程序,需要重写这些CLSID。并将二者接口有差别的部分进行修改,然后重新编译。
2 二次开发文字部分FAQ
提示:
l 各对象、方法和属性的详细使用方法,请参阅WPSAPI帮助。
l 以下示例代码都用VB编写,使用其它语言的开发者,请自行做相应转换。
2.1 什么是WPS的二次开发?
二次开发是指第三方程序利用WPS提供的接口,实现对WPS内部功能的调用,或者实现WPS文档内部信息的自动获取、设置的功能。通过二次开发可以达到以下目的:完成某种自动化的操作、为WPS增加特定功能、和OA系统结合实现办公自动化。
2.2 如何启动WPS文字模块?
如果WPS文字模块已经启动,可以使用GetObject 获得这个进程:
Set wpsApp = GetObject(, "WPS.Application")
wpsApp.Visible = True
如果WPS尚未启动,可以使用CreateObject 来产生一个新进程:
Set wpsApp = CreateObject("WPS.Application")
wpsApp.Visible = True
2.3 如何退出WPS文字模块?
wpsApp.Quit SaveChanges:=wpsSaveChanges, OriginalFormat:=wpsWPSDocument, RouteDocument:=True
set wpsApp = Nothing
2.4 3.如何得到WPS中的工具栏数?
下面的例子显示应用程序所有工具栏的数目。
MsgBox wpsApp.Application.CommandBars.Count
下面的例子使工具栏的第一项不可见
wpsApp.CommandBars.Item(1).Visible = False
2.5 如何隐藏工具栏?
用CommandBars(Index)可以直接返回一个 CommandBar 对象。
使用下面的语句可以将第一个工具栏隐藏
Application.CommandBars.Item(1).Visible = false
2.6 如何使工具栏的按钮失效?
下面的例子切换第一条工具栏第一项按钮的有效性 。
Dim bar As WPS.CommandBarControls
Set bar = wpsApp.CommandBars(1).Controls
bar(1).Enabled = Not bar(1).Enabled
2.7 如何获得一个文档?
下例通过索引号获取第一个文档。
Set wpsDoc = wpsApp.Documents(1)
2.8 如何打开wps文档?
在获得WPS application 对象之后,就能对WPS 进行控制,下面的例子中将以只读方式打开一个WPS文档,并 激活此文档,如果文档不存在,将出示提示信息。
wpsApp.Documents.Open FileName:="E:\散文.wps", ReadOnly:=true
wpsApp.activatedocument. Activate
2.9 如何关闭一个文档?
关闭第一篇文档。
wpsApp.Documents(1).Close
2.10 如何保存一个文档?
如果活动文档在上次保存后进行了修改,下面的例子将保存活动文档。
If ActiveDocument.Saved = False Then
ActiveDocument.Save
End If
2.11 如何获得或修改当前用户名?
下面的例子设置应用程序的用户姓名(对应于菜单条"工具"->"选项"->"用户"->"姓名"):
wpsApp.UserName = "wps user"
下面的例子显示应用程序的用户名
MsgBox wpsApp.UserName
2.12 如何在当前文档中添加一个表格?
下面的例子在文章开头添加一4行4列的表格,并在最后一个单元格里写上"需要写些什么" 字样
Dim rngTbl As WPS.Range
Dim wpsTable As WPS.Table
Set r = ActiveDocument.Range(0, 0)
Set wpsTable = ActiveDocument.Tables.Add(r, 4, 4)
wpsTable.cell(4, 4).Range.Text = "需要写些什么"
2.13 如何获取表格的行和列?
下面的例子将获得第一个表格的行和列
Dim mytable As WPS.Table
Set mytable = wpsApp.ActiveDocument.Tables(1)
MsgBox "第一个表有" & mytable.Columns.Count & "列" & mytable.Rows.Count & "行"
2.14 如何选中一个表?
下面的例子将当前活动文档的第一个表选中。
ActiveDocument.Tables(1).Select
2.15 如何修改一个表格的某个单元格的内容?
下面的例子对活动文档第一个表格的第一个单元格的内容进行显示及修改。
Dim mytable As WPS.Table
Set mytable = ActiveDocument.Tables(1)
MsgBox "原来(1,1)单元格的内容是:" & mytable.cell(1, 1).range.text '缺省表示指定单元格内容
mytable.cell(1, 1).range.text = "金山文字"
MsgBox "修改后是:" & mytable.cell(1, 1).range.text
mytable.cell(1, 1).Range.Text = "WPS Office"
MsgBox "再次修改后是" & mytable.cell(1, 1).Range.Text
2.16 .如何设置一个表格的单元格的高度和宽度?
下面的例子将活动文档第一张表格的所有单元格的高度和宽度设置都设为 200*0.1mm。
Dim mytable As WPS.Table
Set mytable = wpsApp.ActiveDocument.Tables(1)
iCols = mytable.Columns.Count
iRows = mytable.Rows.Count
For i = 1 To iRows
mytable.cell(i, 1).Height = 200
Next
For j = 1 To iCols
mytable.cell(1, j).Width = 200
Next
下面的例子将活动文档的第一个表格的所有单元格的宽度设为设为400*0.1mm。
Dim mytable As WPS.Table
Set mytable = ActiveDocument.Tables(1)
num = mytable.Columns.Count
For j = 1 To num
mytable.cell(1, j).Width = 400
Next
2.17 如何添加一个书签?
下面的例子将在当前文档中添加书签“我”,书签的内容为从第三个字符到第五个字符。
Dim r As WPS.Range
Set r = wpsApp.ActiveDocument.Range
r.SetRange Start:=3, End:=5
wpsApp.ActiveDocument.Bookmarks.Add Name:="我", Range:=r
2.18 如何替换一个书签的内容?
下面的例子判断名为"temp"的书签是否存在于活动文档中,如果存在则替换该书签的内容。
If ActiveDocument.Bookmarks.Exists("temp") = True Then
ActiveDocument.Bookmarks("temp").range.text="ReplaceText"
End If
2.19 如何获取和设置默认打印机?
本示例获取默认打印机的名字。
MsgBox “默认的打印机为:” & Application.ActivePrinter
本示例将 LPT1 端口的本地 HP LaserJet 6 打印机设置为活动打印机。
Application.ActivePrinter = "HP LaserJet 6 local on LPT1:"
2.20 如何打印一篇已打开的文档?
本示例以默认设置打印活动文档的所有页。
Application.ActiveDocument.PrintOut
本示例打印了活动文档中的1到3页。
Application.ActiveDocument.PrintOut From:="1", To:="3"
本示例按照活动文档的75%大小进行打印。
Application.ActiveDocument.PrintOut PrintZoomPaperWidth:=0.75 * _
(8.5 * 1440), PrintZoomPaperHeight:=0.75 * (11 * 1440)
2.21 如何获取和设置某些文字的字体属性?
本示例获取和设置选中部分的字体名称和大小。
With Application.Selection.Range.Font
MsgBox "字体名称:" & .Name & vbCrLf & "字号:" & .Size
MsgBox "即将改变字体名称和字号!"
.Name = "华文行楷"
.Size = 20
MsgBox "改变后的内容如下:" & vbCrLf & "字体名称:" & .Name _
& vbCrLf & "字号:" & .Size
End With
2.22 如何获取和设置段落的格式?
本示例获取和设置活动文档首段左右各缩进1英寸。
With Application.ActiveDocument.Paragraphs(1)
Msgbox “左侧缩进:” & .LeftIndent & VbCrlf & “右侧缩进:” & .RightIndent
.LeftIndent = InchesToPoints(1)
.RightIndent = InchesToPoints(1)
End With
本示例设置活动文档首段的行距为至少 12 磅。
With Application.ctiveDocument.Paragraphs(1)
.LineSpacingRule = wpsLineSpaceAtLeast
.LineSpacing = 12
End With
3 二次开发电子表格部分FAQ
3.1 如何启动WPS电子表格模块?
如果WPS已经启动,可以使用GetObject 获得这个进程:
Set etApp = GetObject(, "ET.Application")
etApp.Visible = True
如果WPS电子表格模块尚未启动,可以使用CreateObject 来产生一个新进程:
Set etApp = CreateObject("ET.Application")
etApp.Visible = True
3.2 如何退出电子表格?
调用Application的Quit方法可以退出电子表格模块,
下面的例子先把所有打开的表格文档存盘,然后退出。
Dim objWB As ET.workbook
For Each objWB In etApp.Workbooks
objWB.Save
Next objWB
etApp.Quit
Set etApp = Nothing
3.3 如何打开一个电子表格文档?
下面的示例以只读方式打开了一个电子表格文档:
Application.Workbooks.Open FileName:="E:\Test.et", ReadOnly:=True
下面的示例打开了一个有密码的电子表格文档:
Application.Workbooks.Open FileName:="E:\Test.et", password:="et"
3.4 如何关闭一个电子表格文档?
本示例关闭了第一个工作簿,并放弃所有对该工作簿的更改。
Application.Workbooks(1).Close SaveChanges:=False
本示例关闭了所有工作簿,如果某个打开的工作簿有改变,将会询问是否保存所作的更改。
Application.Workbooks.Close
3.5 如何保存一个电子表格文档?
本示例演示保存所有已打开的工作簿,并退出金山表格。
For Each w In Application.Workbooks
w.Save
Next w
Application.Quit
本示例演示了将当前工作簿另存到其它位置。
Application.ActiveWorkbook.SaveAs "F:\temp.et"
3.6 如何设置一个单元格的大小?
本例演示了设置(2,2)单元格的所在行的高度为20,所在列宽度为100。
With Application.ActiveWorkbook.ActiveSheet
.Range("B2").RowHeight = 20
.Range("B2").ColumnWidth = 100
End With
本例演示了设置当前工作表的所有行高度为20,所有列宽度为100。
With Application.ActiveWorkbook.ActiveSheet
. StandardHeight=20
. StandardWidth=100
End With
3.7 如何获取单元格中的内容?
本示例获取了当前工作表中第(2,3)单元格中的内容。
MsgBox Application.ActiveWorkbook.ActiveSheet.Cells.Item(2,3).Formula
3.8 如何设置单元格中的内容?
本示例设置了当前工作表中第(2,3)单元格中的内容。
Application.ActiveWorkbook.ActiveSheet.Cells.Item(2, 3).Formula = "temp"
3.9 如何设置单元格中的公式?
本示例设置了当前工作表中第(2,3)单元格中的公式内容,该单元格将显示计算结果:2.5。
Application.ActiveWorkbook.ActiveSheet.Cells.Item(2, 3).Formula = "=2+3/6"
本例演示了统计从(2,1)到(3,4)这一区域的所有单元格内数字的平均值。
Application.ActiveWorkbook.ActiveSheet.Cells.Item(2, 3).Formula = "=AVERAGE(B1,C4)"
3.10 如何设置单元格的边框?
本例演示了将(2,2)单元格的边框粗细设置为etMedium,线条样式设置为etContimuous,颜色设置为vbRed。
With Application.ActiveWorkbook.ActiveSheet
.Range("b2").Borders.Weight = etMedium
.Range("b2").Borders.LineStyle = etContinuous
.Range("b2").Borders.Color = vbRed
End With
3.11 如何读取批注的内容
WPS的电子表格模块用Comment对象代表一个批注。以下的示例,用于读取当前表单的第三行第四列单元格(编号为“D3”)中的批注信息。
Dim objCM As ET.Comment
Dim objRange As ET.Range
Dim objSheet As ET.Worksheet
Set objSheet = ETapp.ActiveSheet
Set objRange = objSheet.Cells.Item(3, 4)
Set objCM = objRange.Comment
If objCM Is Nothing Then
MsgBox "未发现批注内容"
Else
MsgBox objCM.Text
End If
3.12 如何添加批注?
WPS的电子表格模块用Comment对象代表一个批注,通过Range的AddComment方法可以添加批注。
下面的示例为当前表单的第三行第四列单元格(编号为“D3”),添加一个批注。
Dim objCM As ET.Comments
Dim objRange As ET.Range
Dim objSheet As ET.Worksheet
Set objSheet = ETapp.ActiveSheet
Set objRange = objSheet.Cells.Item(3, 4)
objRange.AddComment "这是一个批注"
3.13 如何设置单元格内字体的属性?
通过Font对象可以设置和读取字体的各种属性。
下面的例子设置当前单元格的字体设为粗体45号字
ETapp.ActiveCell.Font.Bold = True
ETapp.ActiveCell.Font.Size = 45
下面的例子把第3行,第4列的单元格中的文字,修改为“字体设置试验”。字体设为黑体,斜体,红色并加下滑线。
Dim objRange As ET.Range
Dim objSheet As ET.Worksheet
Set objSheet = ETapp.ActiveSheet
Set objRange = objSheet.Cells.Item(3, 4)
objRange.Font.Name = "黑体"
objRange.Font.Italic = True
objRange.Font.Underline = etUnderlineStyleDouble
objRange.Font.Color = 255
objRange = "字体设置试验"
3.14 如何打印电子表格文档?
通过PrintOut方法可以实现打印电子表格文档
以下示例实现打印,当前文档的第1到第3页。
Dim wb As ET.workbook
Set ETapp = GetObject(, "ET.Application")
Set wb = ETapp.Workbooks(1)
wb.PrintOut 1, 3, , False, ""