Powershell Excel SaveAs 需要确认
Posted
技术标签:
【中文标题】Powershell Excel SaveAs 需要确认【英文标题】:Powershell Excel SaveAs requires confirmation 【发布时间】:2022-01-12 23:25:23 【问题描述】:我使用下面的脚本将一堆 xls 文件转换为 xlsx。
$folderpath = %tempPath%
$filetype ="*xls"
Add-Type -AssemblyName Microsoft.Office.Interop.Excel
$xlFixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlWorkbookDefault
write-host $xlFixedFormat
$excel = New-Object -ComObject excel.application
$excel.visible = $true
Get-ChildItem -Path $folderpath -Include $filetype -recurse |
ForEach-Object `
$path = ($_.fullname).substring(0, ($_.FullName).lastindexOf("."))
"Converting $path"
$workbook = $excel.workbooks.open($_.fullname)
$path += ".xlsx"
$workbook.saveas($path, $xlFixedFormat)
$workbook.close()
$excel.Quit()
$excel = $null
[gc]::collect()
[gc]::WaitForPendingFinalizers()
它曾经在 VM 上完美运行。 不幸的是,通过更改文件夹路径,我意识到有弹出窗口来确认之前没有出现的保存并且脚本卡在上面。 是否有任何简单的更正可以防止该错误?
"scriptError":
"localizedName": "Error",
"value": "Unable to get the SaveAs property of the Workbook class\r\nAt C:\\Users\\~
"variableName": "ScriptError"
【问题讨论】:
不应该有任何弹出窗口,您实际上并没有更改路径,只是文件扩展名。弹出窗口说什么? SaveAs 方法不应提示确认保存。 保存到 OneDrive 或 Office 365 时可能会发生这种情况。即使工作簿已经保存,Close 方法也会提示。 【参考方案1】:以下是使用 PowerShell 保存 Excel 文件时如何设置路径的示例。我使用 Get-Location cmdlet、Get-Date cmdlet 和文件名的组合设置路径,文件名存储在字符串变量中以供保存脚本时使用.
Add-Type -AssemblyName Microsoft.Office.Interop.Excel
$xlFixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlWorkbookDefault
$htFixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlhtml
$Date = get-date -format R
$CurrentLocation = Get-Location
$CurrentDir = Get-location
$Timestamp = get-date -format d
$xlsx = [String] $CurrentLocation + "\MyNewExcelStuff-" + $Timestamp + ".xlsx"
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$excel.DisplayAlerts = $False
$workbook = $excel.Workbooks.add()
$sheet1 = $workbook.worksheets.Item(1)
$sheet1.name = "Stuff"
$Sheet1.Cells.Item(1,1) = "Reporting Stack Stuff"
$title = $Sheet1.Range("A1:K1")
$title.Select()
$title.MergeCells = $true
$title.VerticalAlignment = -4108 # Centre (vertically) heading
$title.HorizontalAlignment = -4108 # Centre (horizontally) heading
$Title.Interior.ColorIndex = 0
$Excel.ActiveWorkbook.SaveAs($xlsx, $xlFixedFormat)
Start-Sleep -s 2
$Excel.Quit()
$Excel = $Null
【讨论】:
【参考方案2】:你应该使用$workbook.Close($false)
。
【讨论】:
以上是关于Powershell Excel SaveAs 需要确认的主要内容,如果未能解决你的问题,请参考以下文章
excel的当前格式在 Closedxml SaveAs 方法中发生变化