powershell操作word
我假設(shè)許多讀者用PowerShell生成服務(wù)器、事件以及Windows網(wǎng)絡(luò)上各種數(shù)據(jù)的報表。您也許創(chuàng)建過純文本文件,甚至漂亮的HTML報表。但是您也可以用上Microsoft Word,當(dāng)然,前提是您已經(jīng)安裝了Word。在這個系列的第二部分,我將會向您演示如何用PowerShell為Word文檔套用樣式。
創(chuàng)建Word應(yīng)用程序?qū)ο?BR>PowerShell可以通過COM接口控制Word應(yīng)用程序。有趣的地方是,雖然您可以交互式地做所有的操作,但我希望您最終能夠用腳本操作一切。我們從創(chuàng)建一個Word程序?qū)ο箝_始。
復(fù)制代碼 代碼如下:
PS C:/> $word=new-object -ComObject "Word.Application"
如果您好奇的話,可以將這個對象輸出到 Get-Member 命令。我們將創(chuàng)建一系列對象,您可以將每一個對象通過管道輸出到 Get-Member 來探索它們。下一步,我們創(chuàng)建一個文檔對象。
復(fù)制代碼 代碼如下:
PS C:/> $doc=$word.documents.Add()
現(xiàn)在,Word程序已經(jīng)啟動,并且創(chuàng)建了一個新文檔,但是您在屏幕上看不到任何東西。通常這是正常的,因為我們需要它在后臺運行。但是如果您想查看所創(chuàng)建的文檔,您需要將應(yīng)用程序的 Visible 屬性設(shè)置為 True。
復(fù)制代碼 代碼如下:
PS C:/> $word.Visible=$True
在我們插入文本之前,我們需要獲取焦點。創(chuàng)建一個 Selection 對象可以幫我們做一些諸如設(shè)置字體大小和顏色等操作,我們將在第二部分介紹這些操作。
復(fù)制代碼 代碼如下:
PS C:/> $selection=$word.Selection
用PowerShell在文檔中插入文本
現(xiàn)在光標(biāo)在文檔的頂部,現(xiàn)在可以開始插入文本了。我們將用 Selection 對象的 TypeText() 方法插入當(dāng)前的日期和時間。
復(fù)制代碼 代碼如下:
PS C:/> $selection.TypeText((Get-Date))
如果我們繼續(xù)插入文本,那么文本將會緊挨在日期的后面。現(xiàn)在我們用 TypeParagraph() 方法插入一個回車符。
復(fù)制代碼 代碼如下:
PS C:/> $selection.TypeParagraph()
讓我們繼續(xù)插入一些文本。我將用WMI獲取本地計算機(jī)的操作系統(tǒng)信息。
復(fù)制代碼 代碼如下:
PS C:/> $os=Get-WmiObject -class win32_OperatingSystem
PS C:/> $selection.TypeText("Operating System Information for $($os.CSName)")
由于我希望寫入所有的非系統(tǒng)屬性,所以我將快速遞創(chuàng)建一個數(shù)組用來保存所有的屬性名。
復(fù)制代碼 代碼如下:
PS C:/> $os.properties | select Name | foreach -begin {$props=@()} -proc {$props+="$($_.name)"}
現(xiàn)在我可以從 $os 獲取所有的屬性并插入Word文檔。很重要的一點是 TypeText() 的值是字符串型的,所以我需要將內(nèi)聯(lián)的PowerShell表達(dá)式通過管道輸出到 Out-String。
復(fù)制代碼 代碼如下:
PS C:/> $selection.TypeText(($os | Select -Property $props | Out-String))
如果需要的話,還可以繼續(xù)插入文字和圖片。當(dāng)完成操作以后,我將保存并關(guān)閉文檔。
復(fù)制代碼 代碼如下:
PS C:/> $doc.SaveAs([ref]"c:/work/osreport.docx")
PS C:/> $doc.Close()
請確認(rèn)使用 [ref] 為文件路徑轉(zhuǎn)換數(shù)據(jù)類型。假設(shè)我不再創(chuàng)建新的文檔,那么剩下的就是關(guān)閉Word應(yīng)用程序。
復(fù)制代碼 代碼如下:
PS C:/> $word.quit()
這些就是要做的所有事情。最終生成的Word文檔是可用的,雖然可能不太漂亮。在我的例子中發(fā)現(xiàn)一個問題:Word用的事非等寬字體,而PowerShell的輸出格式假設(shè)用的是等寬字體。(譯者注:可能會造成輸出的結(jié)果對不整齊)。
第二個示例
復(fù)制代碼 代碼如下:
$objWord = New-Object -Com Word.Application
$objWord.Visible = $true
$objMissingValue = [System.Reflection.Missing]::Value
$objDocument = $objWord.Documents.Add($objMissingValue, $objMissingValue, $objMissingValue, $objMissingValue)
$objParaHeader = $objDocument.Paragraphs.Add($objMissingValue)
$objParaHeader.Range.Style = "Heading 1"
$objParaHeader.Range.Text = "The power of Microsoft Windows PowerShell"
$objParaHeader.Range.InsertParagraphAfter()
$objParaText = $objDocument.Paragraphs.Add($objMissingValue)
$objParaText.Range.Text = "I will not say I have failed 1000 times; I will say that I have discovered 1000 ways that can cause failure
主站蜘蛛池模板:
蕲春县|
乌兰县|
通榆县|
抚州市|
内黄县|
孟州市|
天柱县|
瓮安县|
营口市|
景德镇市|
晋州市|
伊川县|
东城区|
新化县|
屯门区|
正蓝旗|
建阳市|
商都县|
辰溪县|
石首市|
高安市|
湖州市|
北安市|
育儿|
呼图壁县|
喀什市|
伽师县|
太康县|
永城市|
东乌珠穆沁旗|
平凉市|
芜湖县|
镇原县|
黔南|
张家口市|
奉化市|
新民市|
南阳市|
大名县|
龙川县|
阜新市|