powershell操作word詳解
powershell操作word
我假設(shè)許多讀者用PowerShell生成服務(wù)器、事件以及Windows網(wǎng)絡(luò)上各種數(shù)據(jù)的報(bào)表。您也許創(chuàng)建過(guò)純文本文件,甚至漂亮的HTML報(bào)表。但是您也可以用上Microsoft Word,當(dāng)然,前提是您已經(jīng)安裝了Word。在這個(gè)系列的第二部分,我將會(huì)向您演示如何用PowerShell為Word文檔套用樣式。
創(chuàng)建Word應(yīng)用程序?qū)ο?BR>PowerShell可以通過(guò)COM接口控制Word應(yīng)用程序。有趣的地方是,雖然您可以交互式地做所有的操作,但我希望您最終能夠用腳本操作一切。我們從創(chuàng)建一個(gè)Word程序?qū)ο箝_(kāi)始。
PS C:\> $word=new-object -ComObject "Word.Application"
如果您好奇的話,可以將這個(gè)對(duì)象輸出到 Get-Member 命令。我們將創(chuàng)建一系列對(duì)象,您可以將每一個(gè)對(duì)象通過(guò)管道輸出到 Get-Member 來(lái)探索它們。
下一步,我們創(chuàng)建一個(gè)文檔對(duì)象。
PS C:\> $doc=$word.documents.Add()
現(xiàn)在,Word程序已經(jīng)啟動(dòng),并且創(chuàng)建了一個(gè)新文檔,但是您在屏幕上看不到任何東西。通常這是正常的,因?yàn)槲覀冃枰诤笈_(tái)運(yùn)行。但是如果您想查看所創(chuàng)建的文檔,您需要將應(yīng)用程序的 Visible 屬性設(shè)置為 True。
PS C:\> $word.Visible=$True
在我們插入文本之前,我們需要獲取焦點(diǎn)。創(chuàng)建一個(gè) Selection 對(duì)象可以幫我們做一些諸如設(shè)置字體大小和顏色等操作,我們將在第二部分介紹這些操作。
PS C:\> $selection=$word.Selection
用PowerShell在文檔中插入文本
現(xiàn)在光標(biāo)在文檔的頂部,現(xiàn)在可以開(kāi)始插入文本了。我們將用 Selection 對(duì)象的 TypeText() 方法插入當(dāng)前的日期和時(shí)間。
PS C:\> $selection.TypeText((Get-Date))
如果我們繼續(xù)插入文本,那么文本將會(huì)緊挨在日期的后面。現(xiàn)在我們用 TypeParagraph() 方法插入一個(gè)回車符。
PS C:\> $selection.TypeParagraph()
讓我們繼續(xù)插入一些文本。我將用WMI獲取本地計(jì)算機(jī)的操作系統(tǒng)信息。
PS C:\> $os=Get-WmiObject -class win32_OperatingSystem
PS C:\> $selection.TypeText("Operating System Information for $($os.CSName)")
由于我希望寫入所有的非系統(tǒng)屬性,所以我將快速遞創(chuàng)建一個(gè)數(shù)組用來(lái)保存所有的屬性名。
PS C:\> $os.properties | select Name | foreach -begin {$props=@()} -proc {$props+="$($_.name)"}
現(xiàn)在我可以從 $os 獲取所有的屬性并插入Word文檔。很重要的一點(diǎn)是 TypeText() 的值是字符串型的,所以我需要將內(nèi)聯(lián)的PowerShell表達(dá)式通過(guò)管道輸出到 Out-String。
PS C:\> $selection.TypeText(($os | Select -Property $props | Out-String))
如果需要的話,還可以繼續(xù)插入文字和圖片。當(dāng)完成操作以后,我將保存并關(guān)閉文檔。
PS C:\> $doc.SaveAs([ref]"c:\work\osreport.docx")
PS C:\> $doc.Close()
請(qǐng)確認(rèn)使用 [ref] 為文件路徑轉(zhuǎn)換數(shù)據(jù)類型。假設(shè)我不再創(chuàng)建新的文檔,那么剩下的就是關(guān)閉Word應(yīng)用程序。
PS C:\> $word.quit()
這些就是要做的所有事情。最終生成的Word文檔是可用的,雖然可能不太漂亮。在我的例子中發(fā)現(xiàn)一個(gè)問(wèn)題:Word用的事非等寬字體,而PowerShell的輸出格式假設(shè)用的是等寬字體。(譯者注:可能會(huì)造成輸出的結(jié)果對(duì)不整齊)。
第二個(gè)示例
$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 – Thomas Edison."
$objParaText.Range.InsertParagraphAfter()
$filename = 'C:\\Script\\PowerShell-Example.doc'
$objDocument.SaveAs($filename,
$objMissingValue, $objMissingValue,
$objMissingValue, $objMissingValue,
$objMissingValue, $objMissingValue,
$objMissingValue, $objMissingValue,
$objMissingValue, $objMissingValue)
##Once the script has added all of the required content the document should be closed:
$objDocument.Close()
$objWord.Quit()
相關(guān)文章
Powershell實(shí)現(xiàn)克隆NTFS文件系統(tǒng)權(quán)限
這篇文章主要介紹了Powershell實(shí)現(xiàn)克隆NTFS文件系統(tǒng)權(quán)限,克隆安全描述需要管理員權(quán)限,注意第一個(gè)目錄的安全規(guī)則將全部覆蓋第二個(gè)的目錄的,需要的朋友可以參考下2014-12-12PowerShell入門教程之PowerShell有什么用?
這篇文章主要介紹了PowerShell入門教程之PowerShell有什么用?本文講解了PowerShell的三大作用,需要的朋友可以參考下2014-10-10PowerShell腳本性能優(yōu)化技巧總結(jié)
這篇文章主要介紹了PowerShell腳本性能優(yōu)化技巧總結(jié),一些PowerShell腳本可能很容易消耗很多內(nèi)存,或者運(yùn)行太多時(shí)間,甚至兼而有之,本文會(huì)分享幾個(gè)PowerShell小技巧來(lái)提高這一類腳本的性能,需要的朋友可以參考下2014-05-05Powershell實(shí)現(xiàn)編寫和運(yùn)行腳本
本文為那些對(duì)學(xué)習(xí) Windows PowerShell 命令行和腳本編寫環(huán)境感興趣的系統(tǒng)管理員提供了資源。也請(qǐng)告訴我們本網(wǎng)站如何才能對(duì)您更有用處。2015-09-09添加powershell腳本來(lái)解決nuget打包文件丟失問(wèn)題
這里給大家分享的是作者在使用nuget打包的過(guò)程中遇到丟失文件的問(wèn)題的時(shí)候使用powershell腳本實(shí)現(xiàn)的解決辦法,非常的巧妙,這里推薦給大家2017-11-11Powershell小技巧之使用WS-Man來(lái)調(diào)用PowerShell命令
大多Windows系統(tǒng)的管理員應(yīng)當(dāng)已經(jīng)意識(shí)到在Windows系統(tǒng)上進(jìn)行腳本開(kāi)發(fā)和命令行管理,PowerShell首當(dāng)其沖。微軟許多產(chǎn)品和一些第三方產(chǎn)品都提供了Windows PowerShell的管理接口。但是目前PowerShell只能運(yùn)行在Windows系統(tǒng)上,如何才能在非Windows系統(tǒng)上管理windows系統(tǒng)呢2014-10-10PowerShell入門教程之編寫和使用腳本模塊實(shí)例
這篇文章主要介紹了PowerShell入門教程之編寫和使用腳本模塊實(shí)例,本文講解了模塊、腳本模塊、編寫腳本模塊、模塊安裝路徑、模塊文件夾等內(nèi)容,需要的朋友可以參考下2014-10-10PowerShell小技巧之獲取Windows系統(tǒng)密碼Hash
這篇文章主要介紹了使用PowerShell獲取Windows系統(tǒng)密碼Hash的小技巧,非常的實(shí)用,需要的朋友可以參考下2014-10-10PowerShell中直接輸出轉(zhuǎn)義字符或變量名稱的方法
這篇文章主要介紹了PowerShell中直接輸出轉(zhuǎn)義字符或變量名稱的方法,也就是原樣輸出字符串,不理會(huì)字符串可能包含的換行符、變量等,需要的朋友可以參考下2014-08-08PowerShell中使用.NET將程序集加入全局程序集緩存
這篇文章主要介紹了PowerShell中使用.NET將程序集加入全局程序集緩存,本文介紹了兩種方法實(shí)現(xiàn)把程序集加入全局程序集緩存,著重講解了使用.Net的類庫(kù)解決這個(gè)需求,需要的朋友可以參考下2015-06-06