gpt4 book ai didi

openxml - 将以编程方式创建的 openXML word 文档转换为带有空值的 HTML 错误

转载 作者:行者123 更新时间:2023-12-02 03:44:25 25 4
gpt4 key购买 nike

我正在使用 openxml 创建 WordProcessingDocuments(工作正常,生成的 word 文档正是我想要的),现在我正在尝试使用 openxml Powertools 将这些新创建的文档转换为 HTML。我是新手,所以我希望那是我遗漏的一些愚蠢的东西,但希望有人能用我收到的这些可空错误为我指明正确的方向。

这是准确的错误...

System.NullReferenceException: Object reference not set to an instance of an object.
at OpenXmlPowerTools.HtmlConverter.ConvertToHtmlTransform(WordprocessingDocument wordDoc, HtmlConverterSettings settings, XNode node, Func2 imageHandler)
at OpenXmlPowerTools.HtmlConverter.<>c__DisplayClass37.<ConvertToHtmlTransform>b__1d(XElement e)
at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext()
at System.Xml.Linq.XContainer.AddContentSkipNotify(Object content)
at System.Xml.Linq.XElement..ctor(XName name, Object content)
at OpenXmlPowerTools.HtmlConverter.ConvertToHtmlTransform(WordprocessingDocument wordDoc, HtmlConverterSettings settings, XNode node, Func2 imageHandler)
at OpenXmlPowerTools.HtmlConverter.<>c__DisplayClass37.<ConvertToHtmlTransform>b__1c(XElement e)
at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext()
at System.Xml.Linq.XContainer.AddContentSkipNotify(Object content)
at System.Xml.Linq.XContainer.AddContentSkipNotify(Object content)
at System.Xml.Linq.XElement..ctor(XName name, Object[] content)
at OpenXmlPowerTools.HtmlConverter.ConvertToHtmlTransform(WordprocessingDocument wordDoc, HtmlConverterSettings settings, XNode node, Func`2 imageHandler)

我使用的代码与您可以在 Eric Whites 上找到的代码完全相同博客。

public static void PrintHTML(string file)
{
byte[] byteArray = File.ReadAllBytes(file);
using (MemoryStream memoryStream = new MemoryStream())
{
memoryStream.Write(byteArray, 0, byteArray.Length);
using (WordprocessingDocument doc =
WordprocessingDocument.Open(memoryStream, true))
{

HtmlConverterSettings settings = new HtmlConverterSettings()
{
//PageTitle = "some title"
};
XElement html = HtmlConverter.ConvertToHtml(doc, settings);

File.WriteAllText(@"C:\\Temp\Test.html", html.ToStringNewLineOnAttributes());
}
}
}

我知道代码可以工作,因为如果我向它传递一个不是我创建的普通 worddoc,它可以正常工作并且可以很好地转换为 html。如果我使用 openxml 创建一个 word 文档,然后手动将内容复制到一个新的 word 文件中,保存它,然后通过转换代码传递它,这也可以。所以我认为这一定与我最初在 openxml 中创建文档文档的方式有关。也许我没有向文件中添加所需的部分。

我使用 openxml sdk 比较了工作文件和非工作文件,它们似乎具有相同的组件/部分。

根据我发布的错误,有没有人知道问题出在哪里,即什么是 null?我可以发布 word doc 的创建代码,但它非常广泛,可能只会让人们更加困惑。

最佳答案

我终于弄明白了。我不得不在 openxmlpower 工具中挖掘出 HtmlConverter 的源代码,经过一些调试后我发现代码中的这一行是错误的......

第 371 行

styleId = (string)wordDoc.MainDocumentPart.StyleDefinitionsPart
.GetXDocument().Root.Elements(W.style)
.Where(e => (string)e.Attribute(W.type) == "paragraph" &&
(string)e.Attribute(W._default) == "1")
.FirstOrDefault().Attributes(W.styleId).FirstOrDefault();

基本上在我的调试中

(string)e.Attribute(W._default) 

返回 True 或 False

所以我更改了以下行

 .Where(e => (string)e.Attribute(W.type) == "paragraph" &&
(string)e.Attribute(W._default) == "1")

.Where(e => (string)e.Attribute(W.type) == "paragraph" && (
(string)e.Attribute(W._default) == "1" || (string)e.Attribute(W._default) == "true"))

现在按预期工作

关于openxml - 将以编程方式创建的 openXML word 文档转换为带有空值的 HTML 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17946080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com