OfficeDev / Open-Xml-PowerTools

MIT License
693 stars 26 forks source link

Fails when converting html table to docx #75

Closed asgerhallas closed 8 years ago

asgerhallas commented 8 years ago

Running this code:

        var result = HtmlToWmlConverter.ConvertHtmlToWml(
            "", "", "",
            XElement.Parse("<html><body><table><tr><td>asger</td></tr></table></body></html>"),
            HtmlToWmlConverter.GetDefaultSettings());

Throws this exception:

System.NullReferenceException

Object reference not set to an instance of an object.

   at OpenXmlPowerTools.HtmlToWml.HtmlToWmlConverterCore.GetTableGrid(XElement element, HtmlToWmlConverterSettings settings)
   at OpenXmlPowerTools.HtmlToWml.HtmlToWmlConverterCore.Transform(XNode node, HtmlToWmlConverterSettings settings, WordprocessingDocument wDoc, NextExpected nextExpected, Boolean preserveWhiteSpace)
   at OpenXmlPowerTools.HtmlToWml.HtmlToWmlConverterCore.<>c__DisplayClass20_0.<Transform>b__3(XNode n)
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Xml.Linq.XContainer.AddContentSkipNotify(Object content)
   at System.Xml.Linq.XContainer.AddContentSkipNotify(Object content)
   at System.Xml.Linq.XContainer.AddContentSkipNotify(Object content)
   at OpenXmlPowerTools.HtmlToWml.HtmlToWmlConverterCore.UpdateMainDocumentPart(WordprocessingDocument wDoc, XElement html, HtmlToWmlConverterSettings settings)
   at OpenXmlPowerTools.HtmlToWml.HtmlToWmlConverterCore.ConvertHtmlToWml(String defaultCss, String authorCss, String userCss, XElement xhtml, HtmlToWmlConverterSettings settings, WmlDocument emptyDocument, String annotatedHtmlDumpFileName)
   at OpenXmlPowerTools.HtmlToWmlConverter.ConvertHtmlToWml(String defaultCss, String authorCss, String userCss, XElement xhtml, HtmlToWmlConverterSettings settings)

Can anybody help me spot what, I am doing something wrong? :)

nojan1 commented 8 years ago

It seems the converter expects that table cells have a width. I was able to get around a similiar problem by adding width="auto" to every table cell.

asgerhallas commented 8 years ago

@nojan1 thanks! In my case it was solved by not nesting text nodes directly inside <td>, but using <td><span>some text</span></td> instead.