最近第一次用VSTO(Visual Studio Tools For Office),寫了一個自動生成word報告的小程序,感覺VSTO非常難用。主要是對office對象模型不熟悉,不理解很多類、方法、屬性的含義,word裡面很簡單的操作卻不知道如何找到相應的類和方法去實現。在VS裡面沒辦法直接看到VSTO的注釋,查MSDN又很不方便。後來總算是找到了一個相對快捷的方法,其實VBA和VSTO使用的是一套對象模型,只要把需要實現的操作錄制成宏,對照著VBA的代碼就很容易寫出相應的C#程序了。
下面舉幾個小例子。
輸入標題:在當前光標處插入一段文字並設置成Heading 1樣式,居中
在VBA中錄制的宏如下:
Selection.TypeText Text:="Test Title"
Selection.Style = ActiveDocument.Styles("Heading 1")
Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
Selection.TypeParagraph
相應的C#代碼:
//因為set_Style()要求傳ref object參數,所以不能直接傳string
object style_Heading1 = "Heading 1";
WordApp = new ApplicationClass();
WordApp.Selection.TypeText("Test Title");
//設置樣式
WordApp.Selection.ParagraphFormat.set_Style(ref style_Heading1);
//居中
WordApp.Selection.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
//換行
WordApp.Selection.TypeParagraph();
插入一個三行兩列的表格,在第一行第一列填入今天的日期,設置樣式,根據內容自動調整,去掉標題行
VBA:
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=3, NumColumns:= _
2, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
wdAutoFitFixed
With Selection.Tables(1)
If .Style <> "Table Grid" Then
.Style = "Table Grid"
End If
.ApplyStyleHeadingRows = True
.ApplyStyleLastRow = False
.ApplyStyleFirstColumn = True
.ApplyStyleLastColumn = False
.ApplyStyleRowBands = True
.ApplyStyleColumnBands = False
End With
Selection.Tables(1).Style = "Medium Shading 1 - Accent 5"
Selection.Tables(1).ApplyStyleHeadingRows = Not Selection.Tables(1). _
ApplyStyleHeadingRows
Selection.InsertDateTime DateTimeFormat:="M/d/yyyy", InsertAsField:=False, _
DateLanguage:=wdEnglishUS, CalendarType:=wdCalendarWestern, _
InsertAsFullWidth:=False
Selection.Tables(1).AutoFitBehavior (wdAutoFitContent)