我正在使用应用程序中的OpenXML名称空间。我正在使用它来读取Excel文件中的XML。这可以与某些Excel文件一起使用,但是在其他文件上,我会收到一个运行的时间错误,说
无效的超链接:畸形的URI被嵌入文档中的超链接。
我在以下行上获得运行时间
using (var spreadsheet =
DocumentFormat.OpenXml.Packaging.SpreadsheetDocument.Open(filePathCopy, true))
我不确定为什么它适用于某些Excel文件,并且不适用于其他文件。
解决方案来自埃里克·怀特(Eric White)的博客文章
-
从Nuget导入OpenXMlPowerTools并使用它。
using OpenXmlPowerTools;
所需的方法是
OpenXmlPowerTools.UriFixer.FixInvalidUri
,或者您可以从链接中复制UriFixer
类。
-
添加
FixUri()
方法以使用新定义的URI处理破乌里的方法。private static Uri FixUri(string brokenUri) { return new Uri("http://broken-link/"); }
-
添加代码打开文档,如果发生例外情况,它将修复URI并重新打开固定的文档。
WordprocessingDocument wDoc; try { using (wDoc = WordprocessingDocument.Open(newFileName, true)) { //Try do something } } catch (OpenXmlPackageException e) { if (e.ToString().Contains("Invalid Hyperlink")) { using (FileStream fs = new FileStream(newFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite)) { //Fix problematic URI's UriFixer.FixInvalidUri(fs, brokenUri => FixUri(brokenUri)); } using (wDoc = WordprocessingDocument.Open(newFileName, true)) { //Do something without error } } }
您还可以使用快速VB脚本在Excel中修复Excel工作表:
从Excel表中删除超链接的简便方法:
-
打开工作表。
-
按Alt F11打开VB宏观编辑器。
-
添加下面的VB子,然后保存。如果您不想保存宏 - 因为您可能只这样做一次 - 如果提示提示,请忽略无宏的工作表错误。
-
关闭,然后转到宏并运行宏。
sub removehyperlinks()
'从活动板上删除所有超链接。Activesheet.hyperlinks.delete
结束子
基于:https://www.youtube.com/watch?time_continue=4& v = w8lyijwigj0&feature=emb_title