忽略Excel Interop上的“选择工作表”消息

时间:2018-08-09 14:45:11

标签: excel-interop

也许有人可以帮我解决这个问题。我正在尝试使用powershell和interop将所有XLS转换为XLSX / M文件。到目前为止,一切都很好。在下一步中,我必须调整每个文件中的链接源,该链接源有时会起作用(也从XLS到XLSX / M)。 我不知道为什么,但是有时原始工作表名称在链接的Excel文件中不存在,并导致用户必须与之交互的弹出窗口:

Select Sheet

我实际上并不十分在意表格,我只想忽略该消息,以便脚本可以继续。 在我的代码中,我使用了ChangeLink函数,如下所示:

$workbook.ChangeLink($fileLink_old, $fileLink_new)

我还取消了对excel对象本身的任何警告,但没有帮助:

$excel.DisplayAlerts = $False
$excel.WarnOnFunctionNameConflict = $False
$excel.AskToUpdateLinks = $False
$excel.DisplayAlerts = $False 

对我来说,最方便的方法就是忽略弹出窗口。 有没有一种方法可以不自己遍历所有单元格,也可以不修改Excel文件内部的externalLinks / _rels?

预先感谢

斯蒂芬

编辑: 要遍历每个单元格,不是很有效

ForEach ($Worksheet in @($workbook.Sheets)) {
Write-Host $Worksheet.Name
    ForEach ($filelink in $fileLinks){
        $worksheetname = $null
        $fl_we = $fileLink.Substring(0, $fileLink.LastIndexOf('.'))
        $found = $Worksheet.Cells.Find($fl_we.Substring(0, $fl_we.LastIndexOf('\')) + '\[' + $fl_we.Substring($fl_we.LastIndexOf('\')+1))
        if($found -ne $null){
            Write-Host Search $filelink
            Write-Host $Worksheet.Cells($found.Row,$found.Column).Formula
            $str_formula = $Worksheet.Cells($found.Row,$found.Column).Formula
            $worksheetname = $str_formula.Substring($str_formula.IndexOf(']')+1,$str_formula.IndexOf('!')-$str_formula.IndexOf(']')-2)
            Write-Host $worksheetname -ForegroundColor DarkGray
            #Add worksheets with filename to list
        }

    }
}

#Check if worksheet exists in linked file

0 个答案:

没有答案