在做人事系统过程中,发现网上关于Javascript与VBA交互的知识比较匮乏,为此我把自己对这方面的研究和大家分享下,希望能填补大家对这片知识的空白。
先向大家介绍一些简单应用,比如JS创建Word文档、在Word中打印文字、添加表格,填充表格、合并表格
var wdapp = new ActiveXObject("Word.Application"); //引用word
wdapp.visible = true; //word模板是否可见
wddoc = wdapp.Documents.add(); //添加空白页
wdapp.ActiveDocument.PageSetup.Orientation = wdOrientLandscape; //文档横向排版
wdapp.Selection.TypeText("内容"); //打印文字
var myTable = wddoc.Tables.Add(wdapp.Selection.Range, 3, 3);
myTable.Borders.Enable = true;//创建一个三行三列的表格
myTable.Cell(1, 1).Merge(myTable.Cell(1, 3)); //合并第一行
with (myTable.Cell(1, 1).Range) //向表格第一行第一列填充数据
{
InsertAfter("内容");
}
,那么下面这套解决方案肯定适合您。
首先,我们需要创建XML文件--ForwardedFileLetter.xml,并在XML中配置好在表格中需要显示的内容和内容的格式,如下代码:设置标题内容为“转递档案通知单”,字号为16,字体为宋体,对齐方式为居中。
<?xml version="1.0" encoding="utf-8" ?>
<ForwardedFileLetter>
<Title1 fontsize="16" font-name="宋体" Alignment="1" >转递档案通知单</Title1>
<Content1 fontsize="12" font-name="仿宋">
<Table1 Height="30">
<Row1>
<Column1>档案编号: </Column1>
</Row1>
<Row2>
<Column1>姓名</Column1>
<Column2>现档案存放单位</Column2>
<Column3>袋数 </Column3>
<Column4>册数</Column4>
<Column5>备 注</Column5>
</Row2>
</Table1>
</Content1>
</ForwardedFileLetter>
接着,我们在JS中创建对象,用于保存XML中获取的数据,好比C#中的实体。
var xmldoc = loadXML("ForwardedFileLetter.xml"); //读取xml文件
var Title1 = new Object(); //创建对象
var XMLTitle1 = xmldoc.getElementsByTagName("Title1"); //通过XML中的标记,获得Title1节点中包含的内容,并储存到XMLTitle1中
Title1.FontSize = XMLTitle1[0].getAttribute("fontsize"); //获得节点属性:字体大小
Title1.FontName = XMLTitle1[0].getAttribute("font-name"); //获得节点属性:字体样式
Title1.Alignment = XMLTitle1[0].getAttribute("Alignment");//获取节点属性:对齐方式
Title1.Content = XMLTitle1 [0].childNodes[0].text; //获得节点内容
var Conten1 = new Object(); //创建对象
var XMLContent = xmldoc.getElementsByTagName("Content1"); //获得Content1节点
Content1.FontName = XMLContent [0].getAttribute("font-name"); //获得节点属性:字体样式
Content1.FontSize = XMLContent [0].getAttribute("fontsize"); //获得节点属性;字体大小
var Table1 = new Object(); //创建对象
var XMLtable = xmldoc.getElementsByTagName("Table1"); //获得节点
Table1.Height = XMLtable [0].getAttribute("Height"); //获得表格行高属性
最后介绍如何使用保存在对象中的属性
//设置Word文档中,第一段(标题)内容格式
wdapp.ActiveDocument.Paragraphs(1).Range.Font.Name = Title1.FontName; //通过对象Title1加载XML文件Title1标签下设置的FontName(字体)属性
wdapp.ActiveDocument.Paragraphs(1).Range.Font.Size = Title1.FontSize; //通过对象Title1加载XML文件Title1标签下设置的FontSize(字号)属性
wdapp.ActiveDocument.Paragraphs(1).Alignment = Title1.Alignment; //通过对象Title1加载XML文件Title1标签下设置的Alignment(对齐方式)属性
//设置表格表格内容格式
wdapp.ActiveDocument.Tables(1).Range.Font.Name = Content1.FontName;
wdapp.ActiveDocument.Tables(1).Range.Font.Size = Content1.FontSize;
wdapp.ActiveDocument.Tables(1).Rows.Height = Table1.Height;
//设置表格中的字体居中显示
wdapp.ActiveDocument.Tables(1).Range.ParagraphFormat.Alignment = Title1.Alignment;
wdapp.ActiveDocument.Tables(1).Range.Cells.VerticalAlignment = Title1.Alignment;
下面是自己通过上述方法实现的Demo截图
希望我的讲解能让大家对JS和VBA有更深的认识。