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 需要确认的主要内容,如果未能解决你的问题,请参考以下文章

多次使用 SaveAs 会冻结 Excel

如何修改 Excel 2007 的代码以使用 SaveAs

excel的当前格式在 Closedxml SaveAs 方法中发生变化

将带有 Worksheet.SaveAs 的 excel 文件保存到任何/选定的目录

保存时无法访问 C# excel SaveAs 文件

Excel 2007 VBA ActiveWorkbook SaveAs 未保存...运行时错误 1004