欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

powershell操作word详解

程序员文章站 2022-04-09 14:46:37
powershell操作word我假设许多读者用powershell生成服务器、事件以及windows网络上各种数据的报表。您也许创建过纯文本文件,甚至漂亮的html报表。...

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()