录制Word宏,并将Word宏代码转换为Javascript代码
1、概述
为了加速代码编写,我们可以首先通过录制Word宏的方式来查看完成相应功能所需要的代码,然后转换为JavaScript代码。本文以插入表格为例,描述将宏转换为Javascript代码的过程及注意问题。[本文大部分内容同时适应于EXCEL]
2、为什么不直接在文档中使用宏
1)在Word 2003中,由于安全性问题,默认情况下宏是被禁用的,不能被执行。
2)有宏的文档在打开的时候会有安全性提示,导致用户感觉不友好。
3、开始录制插入表格宏
1)打开word。选择工具->宏->录制新宏:
2)在随后出现的窗口中,“将宏保存在:”下拉框中,选择文档1(文档)
3)从常用工具栏中,点击插入表格按钮,并选择一个3行3列的表格,如下图:
4)在宏录制工具栏上,点击停止录制按钮,如下图所示:
5)此时,文档中出现了一个3行3列的表格。如下图所示:
4、查看宏代码
1)选择工具->宏->Visual Basic 编辑器。如下图所示。
2)在出现的Visual Basic窗口中,从左边展开Project(文档1)中的模块,并双击NewMacros。如下图:
3)右边窗口中的代码如下:
Sub Macro1()
'
' Macro1 Macro
' 宏在 2007-02-02 由 用户19 录制
'
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=3, NumColumns:= _
3, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
wdAutoFitFixed
With Selection.Tables(1)
If .Style <> "网格型" Then
End If
.ApplyStyleHeadingRows = True
.ApplyStyleLastRow = True
.ApplyStyleFirstColumn = True
.ApplyStyleLastColumn = True
End With
End Sub
5、VBA代码分析
以下是vba代码的分析。先看第一条语句:
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=3, NumColumns:= _
3, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
wdAutoFitFixed
以上语句调用了ActiveDocument的Tables集合对象的Add方法。添加一个Table对象到文档中。
With Selection.Tables(1)
If .Style <> "网格型" Then
End If
.ApplyStyleHeadingRows = True
.ApplyStyleLastRow = True
.ApplyStyleFirstColumn = True
.ApplyStyleLastColumn = True
End With
以上语句设定当前插入点所在Table(也就是刚刚加入的Table对象)的Tyle属性,以及ApplyStyleHeadingRows等属性。
6、VBA代码转换为JavaScript代码应该注意的问题
7、转换为JavaScript代码
按照上述原则,以下VBA语句:
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=3, NumColumns:= _
3, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
wdAutoFitFixed
With Selection.Tables(1)
If .Style <> "网格型" Then
End If
.ApplyStyleHeadingRows = True
.ApplyStyleLastRow = True
.ApplyStyleFirstColumn = True
.ApplyStyleLastColumn = True
End With
可以遵循以下步骤被转换为如下JavaScript代码:
首先查阅Tables集合的Add方法描述,在Word编程参考中对Tables对象的Add方法的描述如下:
而通过第6节,第1)步所描述的方法,可以得到wdWord9TableBehavior=1,wdAutoFitFixed=0
有了这些信息,就可以得到如下Js代码:
var mydoc = ntkoobj.ActiveDocument; //得到Document对象
var app = mydoc.Application; //得到Application对象
var sel = app.Selection; //得到Selection对象
var tables = mydoc.Tables;
var newTable = tables.Add(sel.Range,3,3,1,0);
with(newTable)
{
if(style != "网格型")
{
}
ApplyStyleHeadingRows = true;
ApplyStyleLastRow = true;
ApplyStyleFirstColumn = true;
ApplyStyleLastColumn = true;
}
8、测试JavaScript代码
将第7节最后得到的js代码封装为一个function,并在包含NTKO OFFICE文档控件的网页中加入一个按钮调用:
function testAddTable()
{
var mydoc = ntkoobj.ActiveDocument; //得到Document对象
var app = mydoc.Application; //得到Application对象
var sel = app.Selection; //得到Selection对象
var tables = mydoc.Tables;
var newTable = tables.Add(sel.Range,3,3,1,0);
with(newTable)
{
if(style != "网格型")
{
}
ApplyStyleHeadingRows = true;
ApplyStyleLastRow = true;
ApplyStyleFirstColumn = true;
ApplyStyleLastColumn = true;
}
}
........................................
<button onclick="testAddTable()">测试添加表格</button>
|