Javascript利用VBA編輯Word文檔

在做人事系統過程中,發現網上關於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,字體為宋體,對齊方式為居中。


  轉遞檔案通知單
  
    
        
     	   檔案編號: 
   	
   	
     	   姓名
     	   現檔案存放單位
    	   袋數 
    	   冊數
    	   備 註
   	
     
  

接著,我們在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有更深的認識。

發佈留言