Сохранение файла формата .xlsm в Excel с использованием Windows Powershell - PullRequest
0 голосов
/ 15 января 2020

Привет всем. Я открываю лист .xlsm в windows powershell, а затем записываю данные в различные ячейки из переменных read-host. Все отлично работает, кроме случаев, когда я go для сохранения файла с помощью powershell. Это дает мне эту ошибку, указанную ниже, и отказывается сохранять ее в формате .xlsm, файл уже является файлом .xlsm, поэтому я не конвертирую его. У меня нет проблем при использовании этого кода для сохранения форматов .xlsx, что, вероятно, является моей проблемой. Я немного новичок, прости мое невежество.

"Это расширение нельзя использовать с выбранным типом файла. Измените расширение файла в текстовом поле« Имя файла »или выберите другой тип файла, изменив параметр« Сохранить как ». type. "

Вот код, который я использую для сохранения в .xlsm. Я удалил большую часть файловой структуры для защиты конфиденциальности и упростил ее, мой код работает просто отлично, но не в части сохранения в .xlsm, пожалуйста, помогите ...

            Add-Type -AssemblyName Microsoft.Office.Interop.Excel
            $xlFixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlWorkbookDefault
            $XL = New-Object -comobject Excel.Application
            $Num = Read-Host - Prompt 'What is the number?'
            $FilePath = "V:\$fileName.xlsm"
            $workbook = $XL.Workbooks.Open($FilePath)
            $WS = $workbook.Worksheets("Sheet1")
            $ws.Cells.Item(2,29) = "$Num"
            $XL.DisplayAlerts = $False
            $WB.SaveAs($FilePath)
            $WB.Close
            [System.Runtime.Interopservices.Marshal]::ReleaseComObject($XL) | Out-Null

РЕШЕНИЕ:

            Add-Type -AssemblyName Microsoft.Office.Interop.Excel
            $xlFixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlOpenXMLWorkbookMacroEnabled
            $XL = New-Object -comobject Excel.Application
            $Num = Read-Host - Prompt 'What is the number?'
            $FilePath = "V:\$fileName.xlsm"
            $workbook = $XL.Workbooks.Open($FilePath)
            $WS = $workbook.Worksheets("Sheet1")
            $ws.Cells.Item(2,29) = "$Num"
            $XL.DisplayAlerts = $False
            $WB.SaveAs($FilePath,$xlFixedFormat)
            $WB.Close
            [System.Runtime.Interopservices.Marshal]::ReleaseComObject($XL) | Out-Null

1 Ответ

0 голосов
/ 15 января 2020

Из XlFileFormat документов вы хотите xlOpenXMLWorkbookMacroEnabled для файлов XLSM.

$xlFixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlOpenXMLWorkbookMacroEnabled
...
$WB.SaveAs($FilePath,$xlFixedFormat)
...