Примечание редактора: ОП отказался от этого вопроса и задал вариант на https://stackoverflow.com/questions/38766898/saving-excel-worksheets-to-pdf-using-powershell.Автоматизация экспорта таблиц Excel в PDF
Я пытался реализовать следующий сценарий PowerShell, но без везения. Кто-то может помочь?
Я знаю, что этот скрипт сохранит 1 файл PDF на книгу Excel, однако, как только я получу эту работу, я посмотрю на экспорт каждого листа Excel для разделения файлов PDF.
ExportTo-ExcelPDF.ps1 из 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] (https://msdn.microsoft.com/en-us/library/office/ff198122 (v = office.14) .aspx), говоря «* Ошибка будет, если надстройка PDF в настоящее время не установлена. *» означает, что это произойдет? Третья ошибка: '$ objExcel', по-видимому,' $ null'. Сочетание ошибок выглядит очень странно - записывает ли он все файлы PDF вообще? Какую среду вы используете? (версии программного обеспечения, как вы его используете)? – TessellatingHeckler
Файлы PDF не создаются вообще. Работа на сервере 2012 R2 хост/Powershell 4.0/Office 2016 Pro Plus. – Ash
@TessellatingHeckler. Первая ошибка не обязательно означает, что '$ workbook' является' $ null' - только то, что любой объект '$ workbook' представляет, не имеет свойства' Saved' (предполагая 'Set-StrictMode -Version 2' или выше). Аналогично, вторая ошибка просто указывает, что у объекта нет метода 'ExportAsFixedFormat' - конкретные параметры не вступают в игру, поэтому независимо от того, установлен ли плагин PDF, пока не имеет значения. Третья ошибка, безусловно, не означает, что '$ objExcel'' $ null'. Объекты существуют, но (некоторые) не имеют ожидаемых членов, среди других проблем. – mklement0