PowerShell中Excel工作簿保存时出现错误

4
我正在尝试将 .xls 文件转换为 .xlsx,但是我尝试了很多代码变化,每次都遇到以下错误信息:
Exception lors de l'appel de « SaveAs » avec « 2 » argument(s) : « La méthode SaveAs de la classe Workbook a échoué. » Au caractère C:\temp\xlsx.ps1:18 : 6
try{$opendoc.saveas($basename, $saveFormat)} ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CategoryInfo : NotSpecified: (:) [], MethodInvocationException FullyQualifiedErrorId : ComMethodTargetInvocation
以下是我的代码:
$excel = new-object -comobject excel.application
$excel.Visible = $false
$saveFormat = "xlOpenXMLWorkbook";

ls c:\temp\*.xls | %{
    $opendoc = $excel.workbooks.open($_.FullName)
    $excel.DisplayAlerts =$false 
    $basename = $_.basename
    try{
        $opendoc.saveas($basename,$saveFormat,$null,$null,$false,$false,"xlNoChange","xlLocalSessionChanges")
      # tried this one and got same error : $opendoc.saveas($basename, $saveFormat)}
    }
    catch{
        $opendoc.close();$excel.quit()
        $_ 
    }
    $opendoc.close();   
}

$excel.quit()    

你知道工作流程吗?

真不敢相信这个老旧的解决方案居然对我有用... https://sharepoint.stackexchange.com/questions/159887/error-exception-calling-saveas-with-2-arguments-saveas-method-of-workbo :| - Mr Smith
1个回答

6

SaveAs 方法中传入的常量通常代表数字值,而不是字符串。在您的情况下,第二个参数可能应该是 51 (xlWorkbookDefault),如此文档 所述。其他两个字符串也是如此 ("xlNoChange"应该是1,和 "xlLocalSessionChanges"应该是2)。您需要使用数字值或自己定义常量,例如:

$xlWorkbookDefault     = 51
$xlNoChange            =  1
$xlLocalSessionChanges =  2

此外,您不能在应该保留默认值的参数中使用$null。请改用[Type]::Missing
将此更改为:
$opendoc.saveas($basename,$saveFormat,$null,$null,$false,$false,"xlNoChange","xlLocalSessionChanges")

变成这个:

$opendoc.SaveAs($basename, 51, [Type]::Missing, [Type]::Missing, $false, $false, 1, 2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接