【问题标题】:Excel workbooks.saveas() error in powershellPowerShell中的Excel workbooks.saveas()错误
【发布时间】:2014-08-14 01:36:59
【问题描述】:

我正在尝试将 .xls 文件转换为 .xlxs 我尝试了此代码的许多变体,但每次我都遇到此错误消息:

Exception lors de l'appel de « SaveAs » avec « 2 » 参数:« La 方法 SaveAs de la classe Workbook a échoué。 » 特征 C:\temp\xlsx.ps1:18 : 6

  • 尝试{$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()    

你知道工作配方吗?

【问题讨论】:

标签: excel powershell com


【解决方案1】:

传递给SaveAs 方法的常量通常表示数值,而不是字符串。在您的情况下,第二个参数可能应该是 51 (xlWorkbookDefault),如文档中的 here 所示。其他两个字符串("xlNoChange"should be 1,和"xlLocalSessionChanges"should be 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)

【讨论】:

    猜你喜欢
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 2013-09-14
    相关资源
    最近更新 更多