一段用powershell操作office word的代码,在这台win7 64位的系统上直接双击ps1脚本文件能正常运行,但是一通过其他语言(actionscript 3)来调用执行就会报错,值得注意的是,在另一台win7 64位电脑上无论直接双击还是用actionscript 3调用都没问题。
已经排除权限问题,值得注意的是,在另一台win10电脑上也遇到同样的报错。
# 加载Word应用程序
$word = New-Object -ComObject Word.Application
#$word.visible=$true
# 打开文档
$doc = $word.Documents.Add()
# 设置页面边距
$section = $doc.Sections.Item(1)
$section.PageSetup.LeftMargin = 36
$section.PageSetup.RightMargin = 36
$section.PageSetup.TopMargin = 36
$section.PageSetup.BottomMargin = 36
#获取文档object
$Section = $doc.Sections.Item(1);
#获取页眉
$Header = $Section.Headers.Item(1);
#获取页脚
$Footer = $Section.Footers.Item(1);
#设置页眉页码
$myDoc=$word.Selection
$myDoc.TypeText("111111") #processArgs[4]
$myDoc.TypeText("2222222") #processArgs[5]
$myDoc.TypeText("333
3333") #processArgs[6]
# 插入空白页
$selection = $word.Selection
$selection.InsertNewPage()
# 将光标移动到文档结尾
$selection.EndKey([Microsoft.Office.Interop.Word.WdUnits]::wdStory)
# 保存并关闭文档
$doc.SaveAs([ref]"C:\myMergeDoc.docx")
$doc.Close()
# 关闭Word应用程序
$word.Quit()
报错内容如下(因为是从flash里面输出的报错信息,所以内容可能会和PS直接输出的有点不一样,主要就是多了几个as3那边的变量,比如process error ,以及process 都是as3的变量可以忽略):
process error :不能对值为空的表达式调用方法。
process error :所在位置 D:\2023年3月7日_测_as3直接操作ps写word\bin\createWord2.ps1:5 字符: 27
+ $doc = $word.Documents.Add <<<< ()
process error : + CategoryInfo : InvalidOperation: (Add:String) [], RuntimeExcept
ion
process error : + FullyQualifiedErrorId : InvokeMethodOnNull
process error :
process error :不能对值为空的表达式调用方法。
process error :所在位置 D:\2023年3月7日_测_as3直接操作ps写word\bin\createWord2.ps1:7 字符: 30
process error :+ $section = $doc.Sections.Item <<<< (1)
process error : + CategoryInfo : InvalidOperation: (Item:String) [], RuntimeExcep
process error : tion
process error : + FullyQualifiedErrorId : InvokeMethodOnNull
process error :
process error :在此对象上找不到属性“LeftMargin”;请确保该属性存在且可设置。
process error :所在位置 D:\2023年3月7日_测_as3直接操作ps写word\bin\createWord2.ps1:8 字符: 20
process error :+ $section.PageSetup. <<<< LeftMargin = 36
process error : + CategoryInfo : InvalidOperation: (LeftMargin:String) [], Runtim
process error : eException
process error : + FullyQualifiedErrorId : PropertyNotFound
process error :在此对象上找不到属性“RightMargin”;请确保该属性存在且可设置。
process error :所在位置 D:\2023年3月7日_测_as3直接操作ps写word\bin\createWord2.ps1:9 字符: 20
process error :+ $section.PageSetup. <<<< RightMargin = 36
process error : + CategoryInfo : InvalidOperation: (RightMargin:String) [], Runti
process error : meException
process error : + FullyQualifiedErrorId : PropertyNotFound
process error :
process error :在此对象上找不到属性“TopMargin”;请确保该属性存在且可设置。
process error :所在位置 D:\2023年3月7日_测_as3直接操作ps写word\bin\createWord2.ps1:10 字符: 20
process error :+ $section.PageSetup. <<<< TopMargin = 36
process error : + CategoryInfo : InvalidOperation: (TopMargin:String) [], Runtime
process error : Exception
process error : + FullyQualifiedErrorId : PropertyNotFound
process error :在此对象上找不到属性“BottomMargin”;请确保该属性存在且可设置。
process error :所在位置 D:\2023年3月7日_测_as3直接操作ps写word\bin\createWord2.ps1:11 字符: 20
process error :+ $section.PageSetup. <<<< BottomMargin = 36
process error : + CategoryInfo : InvalidOperation: (BottomMargin:String) [], Runt
process error : imeException
+ FullyQualifiedErrorId : PropertyNotFound
process error :不能对值为空的表达式调用方法。
process error :所在位置 D:\2023年3月7日_测_as3直接操作ps写word\bin\createWord2.ps1:13 字符: 30
+ $Section = $doc.Sections.Item <<<< (1);
process error : + CategoryInfo : InvalidOperation: (Item:String) [], RuntimeExcep
process error : tion
+ FullyQualifiedErrorId : InvokeMethodOnNull
process error :不能对值为空的表达式调用方法。
process error :所在位置 D:\2023年3月7日_测_as3直接操作ps写word\bin\createWord2.ps1:15 字符: 32
process error :+ $Header = $Section.Headers.Item <<<< (1);
process error : + CategoryInfo : InvalidOperation: (Item:String) [], RuntimeExcep
tion
+ FullyQualifiedErrorId : InvokeMethodOnNull
process error :
process error :不能对值为空的表达式调用方法。
process error :所在位置 D:\2023年3月7日_测_as3直接操作ps写word\bin\createWord2.ps1:17 字符: 32
+ $Footer = $Section.Footers.Item <<<< (1);
process error : + CategoryInfo : InvalidOperation: (Item:String) [], RuntimeExcep
process error : tion
process error : + FullyQualifiedErrorId : InvokeMethodOnNull
process error :不能对值为空的表达式调用方法。
所在位置 D:\2023年3月7日_测_as3直接操作ps写word\bin\createWord2.ps1:20 字符: 16
process error :+ $myDoc.TypeText <<<< ("111111") #processArgs[4]
process error : + CategoryInfo : InvalidOperation: (TypeText:String) [], RuntimeE
process error : xception
process error : + FullyQualifiedErrorId : InvokeMethodOnNull
process error :
process error :不能对值为空的表达式调用方法。
process error :所在位置 D:\2023年3月7日_测_as3直接操作ps写word\bin\createWord2.ps1:21 字符: 16
process error :+ $myDoc.TypeText <<<< ("2222222") #processArgs[5]
process error : + CategoryInfo : InvalidOperation: (TypeText:String) [], RuntimeE
process error : xception
process error : + FullyQualifiedErrorId : InvokeMethodOnNull
process error :
process error :不能对值为空的表达式调用方法。
process error :所在位置 D:\2023年3月7日_测_as3直接操作ps写word\bin\createWord2.ps1:22 字符: 16
process error :+ $myDoc.TypeText <<<< ("333
process error : + CategoryInfo : InvalidOperation: (TypeText:String) [], RuntimeE
xception
+ FullyQualifiedErrorId : InvokeMethodOnNull
process error :
process error :不能对值为空的表达式调用方法。
process error :所在位置 D:\2023年3月7日_测_as3直接操作ps写word\bin\createWord2.ps1:26 字符: 25
+ $selection.InsertNewPage <<<< ()
process error : + CategoryInfo : InvalidOperation: (InsertNewPage:String) [], Run
process error : timeException
process error : + FullyQualifiedErrorId : InvokeMethodOnNull
process error :
process error :不能对值为空的表达式调用方法。
process error :所在位置 D:\2023年3月7日_测_as3直接操作ps写word\bin\createWord2.ps1:28 字符: 18
process error :+ $selection.EndKey <<<< ([Microsoft.Office.Interop.Word.WdUnits]::wdStory)
process error : + CategoryInfo : InvalidOperation: (EndKey:String) [], RuntimeExc
process error : eption
process error : + FullyQualifiedErrorId : InvokeMethodOnNull
process error :
process error :不能对值为空的表达式调用方法。
process error :所在位置 D:\2023年3月7日_测_as3直接操作ps写word\bin\createWord2.ps1:30 字符: 12
+ $doc.SaveAs <<<< ([ref]"C:\myMergeDoc.docx")
process error : + CategoryInfo : InvalidOperation: (SaveAs:String) [], RuntimeExc
process error : eption
+ FullyQualifiedErrorId : InvokeMethodOnNull
process error :
process error :不能对值为空的表达式调用方法。
process error :所在位置 D:\2023年3月7日_测_as3直接操作ps写word\bin\createWord2.ps1:31 字符: 11
+ $doc.Close <<<< ()
process error : + CategoryInfo : InvalidOperation: (Close:String) [], RuntimeExce
process error : ption
process error : + FullyQualifiedErrorId : InvokeMethodOnNull
process error :
process error :使用“3”个参数调用“Quit”时发生异常:“无法将类型为“Microsoft.Office.Interop.Word.A
process error :pplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Ap
plication”。此操作失败的原因是对 IID 为“{00020970-0000-0000-C000-000000000046}”
process error :的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (
异常来自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY))。”
所在位置 D:\2023年3月7日_测_as3直接操作ps写word\bin\createWord2.ps1:33 字符: 11
process error :+ $word.Quit <<<< ()
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
process error :