powershell操作word详解
powershell操作word
我假设许多读者用powershell生成服务器、事件以及windows网络上各种数据的报表。您也许创建过纯文本文件,甚至漂亮的html报表。但是您也可以用上microsoft word,当然,前提是您已经安装了word。在这个系列的第二部分,我将会向您演示如何用powershell为word文档套用样式。
创建word应用程序对象
powershell可以通过com接口控制word应用程序。有趣的地方是,虽然您可以交互式地做所有的操作,但我希望您最终能够用脚本操作一切。我们从创建一个word程序对象开始。
ps c:\> $word=new-object -comobject "word.application"
如果您好奇的话,可以将这个对象输出到 get-member 命令。我们将创建一系列对象,您可以将每一个对象通过管道输出到 get-member 来探索它们。
下一步,我们创建一个文档对象。
ps c:\> $doc=$word.documents.add()
现在,word程序已经启动,并且创建了一个新文档,但是您在屏幕上看不到任何东西。通常这是正常的,因为我们需要它在后台运行。但是如果您想查看所创建的文档,您需要将应用程序的 visible 属性设置为 true。
ps c:\> $word.visible=$true
在我们插入文本之前,我们需要获取焦点。创建一个 selection 对象可以帮我们做一些诸如设置字体大小和颜色等操作,我们将在第二部分介绍这些操作。
ps c:\> $selection=$word.selection
用powershell在文档中插入文本
现在光标在文档的顶部,现在可以开始插入文本了。我们将用 selection 对象的 typetext() 方法插入当前的日期和时间。
ps c:\> $selection.typetext((get-date))
如果我们继续插入文本,那么文本将会紧挨在日期的后面。现在我们用 typeparagraph() 方法插入一个回车符。
ps c:\> $selection.typeparagraph()
让我们继续插入一些文本。我将用wmi获取本地计算机的操作系统信息。
ps c:\> $os=get-wmiobject -class win32_operatingsystem
ps c:\> $selection.typetext("operating system information for $($os.csname)")
由于我希望写入所有的非系统属性,所以我将快速递创建一个数组用来保存所有的属性名。
ps c:\> $os.properties | select name | foreach -begin {$props=@()} -proc {$props+="$($_.name)"}
现在我可以从 $os 获取所有的属性并插入word文档。很重要的一点是 typetext() 的值是字符串型的,所以我需要将内联的powershell表达式通过管道输出到 out-string。
ps c:\> $selection.typetext(($os | select -property $props | out-string))
如果需要的话,还可以继续插入文字和图片。当完成操作以后,我将保存并关闭文档。
ps c:\> $doc.saveas([ref]"c:\work\osreport.docx")
ps c:\> $doc.close()
请确认使用 [ref] 为文件路径转换数据类型。假设我不再创建新的文档,那么剩下的就是关闭word应用程序。
ps c:\> $word.quit()
这些就是要做的所有事情。最终生成的word文档是可用的,虽然可能不太漂亮。在我的例子中发现一个问题:word用的事非等宽字体,而powershell的输出格式假设用的是等宽字体。(译者注:可能会造成输出的结果对不整齐)。
第二个示例
$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()
下一篇: MYSQL 笔记