在做人事系统过程中,发现网上关于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有更深的认识。