【发布时间】:2016-12-09 23:27:47
【问题描述】:
编者注:OP 已经放弃了这个问题,并在https://stackoverflow.com/questions/38766898/saving-excel-worksheets-to-pdf-using-powershell 提出了一个变体。
我一直在尝试实现以下 PowerShell 脚本,但没有任何运气。有人可以帮忙吗?
我知道这个脚本会为每个 Excel 工作簿保存 1 个 PDF 文件,但是一旦我得到这个工作,我会考虑将每个 Excel 工作表导出为单独的 PDF 文件。
ExportTo-ExcelPDF.ps1 from http://blogs.technet.com/b/heyscriptingguy/archive/2010/09/06/save-a-microsoft-excel-workbook-as-a-pdf-file-by-using-powershell.aspx
$path = "c:\fso"
$xlFixedFormat = "Microsoft.Office.Interop.Excel.xlFixedFormatType" -as [type]
$excelFiles = Get-ChildItem -Path $path -include *.xls, *.xlsx -recurse
$objExcel = New-Object -ComObject excel.application
$objExcel.visible = $false
foreach($wb in $excelFiles)
{
$filepath = Join-Path -Path $path -ChildPath ($wb.BaseName + ".pdf")
$workbook = $objExcel.workbooks.open($wb.fullname, 3)
$workbook.Saved = $true
"saving $filepath"
$workbook.ExportAsFixedFormat($xlFixedFormat::xlTypePDF, $filepath)
$objExcel.Workbooks.close()
}
$objExcel.Quit()
错误信息:
The property 'Saved' cannot be found on this object. Verify that the
property exists and can be set.
At C:\ExportExcel.ps1:23 char:2
+ $workbook.Saved = $true
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyAssignmentException
saving C:\ExportExcel.pdf
Method invocation failed because [System.__ComObject] does not contain a
method named 'ExportAsFixedFormat'.
At C:\ExportExcel.ps1:25 char:2
+ $workbook.ExportAsFixedFormat($xlFixedFormat::xlTypePDF, $filepath)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
You cannot call a method on a null-valued expression.
At C:\ExportExcel.ps1:26 char:2
+ $objExcel.Workbooks.close()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Exception calling "Quit" with "0" argument(s): "Call was rejected by callee.
(Exception from HRESULT: 0x80010001 (RPC_E_CALL_REJECTED))"
At C:\ExportExcel.ps1:28 char:1
+ $objExcel.Quit()
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : COMException
【问题讨论】:
-
第一个错误看起来
$workbook为空,打开文件失败。第二个错误看起来像$workbook不是工作簿对象,或者docs 说“如果当前未安装 PDF 插件会发生错误。”意味着会发生这种情况吗?第三个错误是$objExcel显然是$null。错误的组合看起来很奇怪——它会写任何 PDF 文件吗?你在什么样的环境下运行它? (软件版本,你是怎么运行的)? -
根本不创建 PDF 文件。在 Server 2012 R2 主机/Powershell 4.0/Office 2016 Pro Plus 上运行。
-
@TessellatingHeckler 第一个错误并不一定意味着
$workbook是$null- 只有$workbook表示的任何对象都没有Saved属性(假设Set-StrictMode -Version 2或更高)。同样,第二个错误只是表明该对象没有方法ExportAsFixedFormat- 具体参数不起作用,因此是否安装了PDF插件并不重要(还)。第三个错误绝对不暗示$objExcel是$null。对象存在,但(一些)没有预期的成员,以及其他问题。 -
感谢您的帮助。我回到绘图板上,离所需的结果更近了一点。新问题的新帖子:stackoverflow.com/questions/38766898/…
-
@mklement0 "第三个错误绝对不意味着 $objExcel 是 $null。" - 它也是。根据您更深入的知识,可能是错误的,但之前我们看到:
$excel.workbooks.open()是有效的,因此.workbooks是一个好的$objExcel对象的有效属性。错误说$excel.workbooks是a null valued expression,而不是__ does not contain a property named 'workbooks'。$objExcel.x.y()的行为与$null.x.y()相同意味着 $objExcel 为空。至少一点点。
标签: excel powershell