我在应用程序中使用 OpenXml 命名空间。我用它来读取 Excel 文件中的 XML。这对于某些 Excel 文件工作正常,但在其他文件上我收到运行时错误,提示
Invalid Hyperlink: Malformed URI is embedded as a hyperlink in the document.
我在下面一行得到运行时间
using (var spreadsheet =
DocumentFormat.OpenXml.Packaging.SpreadsheetDocument.Open(filePathCopy, true))
我不确定为什么它适用于某些 Excel 文件而不适用于其他文件。
最佳答案
解决方案来自 Eric White 的 blog post
从 Nuget 导入 OpenXmlPowerTools 并使用它。
using OpenXmlPowerTools;
所需的方法是
OpenXmlPowerTools.UriFixer.FixInvalidUri
,或者您可以从链接复制UriFixer
类。
添加
FixUri()
方法,以使用新定义的 URI 处理损坏的 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 } } }
关于c# - 无效超链接 : Malformed URI is embedded as a hyperlink in the document,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40979946/