也许有人可以帮我解决这个问题。我正在尝试使用powershell和interop将所有XLS转换为XLSX / M文件。到目前为止,一切都很好。在下一步中,我必须调整每个文件中的链接源,该链接源有时会起作用(也从XLS到XLSX / M)。 我不知道为什么,但是有时原始工作表名称在链接的Excel文件中不存在,并导致用户必须与之交互的弹出窗口:
我实际上并不十分在意表格,我只想忽略该消息,以便脚本可以继续。 在我的代码中,我使用了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