diff --git a/OpenXmlPowerTools/WmlToHtmlConverter.cs b/OpenXmlPowerTools/WmlToHtmlConverter.cs index 8c908cfd..eafa6c04 100644 --- a/OpenXmlPowerTools/WmlToHtmlConverter.cs +++ b/OpenXmlPowerTools/WmlToHtmlConverter.cs @@ -820,7 +820,14 @@ private static object ProcessTableCell(WordprocessingDocument wordDoc, WmlToHtml { var currentRow = element.Parent.ElementsBeforeSelf(W.tr).Count(); var currentCell = element.ElementsBeforeSelf(W.tc).Count(); + var tbl = element.Parent.Parent; + var beforeColsCount = element + .ElementsBeforeSelf(W.tc) + .Select(c => c.Element(W.tcPr).Elements(W.gridSpan).Attributes(W.val).FirstOrDefault()) + .Select(a => a == null || (int)a == 0 ? 1 : (int)a) + .Sum(); + int rowSpanCount = 1; currentRow += 1; while (true) @@ -828,7 +835,14 @@ private static object ProcessTableCell(WordprocessingDocument wordDoc, WmlToHtml var row = tbl.Elements(W.tr).Skip(currentRow).FirstOrDefault(); if (row == null) break; - var cell2 = row.Elements(W.tc).Skip(currentCell).FirstOrDefault(); + var rowCurrentColCount = 0; + var cell2 = row.Elements(W.tc).SkipWhile(e => + { + var val = e.Element(W.tcPr).Elements(W.gridSpan).Attributes(W.val).FirstOrDefault(); + var col = val == null || (int)val == 0 ? 1 : (int) val; + rowCurrentColCount += col; + return rowCurrentColCount <= beforeColsCount; + }).FirstOrDefault(); if (cell2 == null) break; if (cell2.Elements(W.tcPr).Elements(W.vMerge).FirstOrDefault() == null)