换行时的OpenXML、PresentationML表高和行高

本文关键字:PresentationML OpenXML 换行 | 更新日期: 2023-09-27 18:26:35

我是Open Xml的新手,已经使用Open Xml SDK创建了一个报告应用程序。它将数据填充到表中,当表高度超过幻灯片边框时,克隆幻灯片并在新幻灯片中填充下一组数据,以此类推。所有操作都很好,但当某些行的数据换行为2行时,无法在正确的位置插入新页面。原因似乎是Open Xml在有单行数据时仍然返回与行高相同的行高。有没有办法解决这个问题。

下面是一段执行分页逻辑的代码(CreateTextCell是一个创建文本单元格并返回的方法):

  var tbl = current.Slide.Descendants<A.Table>().First();
                var tr = new A.TableRow();
                tr.Height = 200000;
                tr.Append(CreateTextCell(product.Name));
                tr.Append(CreateTextCell(product.ProductNumber));
                tr.Append(CreateTextCell(product.Size));
                tr.Append(CreateTextCell(String.Format("{0:00}", product.ListPrice)));
                tr.Append(CreateTextCell(product.SellStartDate.ToShortDateString()));
                tbl.Append(tr);
                totalHeight += tr.Height;

                if (totalHeight > pageBorder)
                    overflow = true;

换行时的OpenXML、PresentationML表高和行高

我有一个非常类似的问题,发现在通过Open XML SDK填充表时,表的高度不会更新。只有当演示文稿在Power Point中实际打开时,它才会更新。这显然不会帮助您在代码中确定何时将表拆分为新幻灯片,但如果您尝试这个答案,可能会有所帮助。

如果您可以假设上面的所有列都是固定宽度的,除了使用product.Name的第一列,并且您的字体样式相同,那么您可以使用以下方法,而不是检查表的高度>边框。

首先,在PowerPoint中打开您的演示文稿,然后转到带有表格的幻灯片。输入固定宽度列数据。然后在第一列中,输入'XXXX。。。。"直到换行。计算换行前的字符数。此数字将为maxLengthBeforeBreak

其次,清除上面第一步中的行,然后输入一个不换行的类似行。向下复制并粘贴此行,并在幻灯片中填充表格,直到达到对用户有吸引力的幻灯片的最大行数。该行数将为maxTableRowsPerSlide

现在,当您用行填充每张幻灯片时,计算在rowCount变量中插入的行数。在rowCount<maxTableRowsPerSlide,然后开始新幻灯片。

对于每一行,如果product.Name的长度>maxLengthBeforeOverflow,则可以通过将product.Name的长度除以maxLengthBeforeOverflow来增加rowCount,以获得该行换行的行数。