From 06edc1f4702981444e665a22b40e39c4a88dcdcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E6=89=8D?= Date: Tue, 17 Nov 2020 10:47:18 +0800 Subject: [PATCH] [fix bug] use col span count to caculate row span --- OpenXmlPowerTools/WmlToHtmlConverter.cs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) 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)