关于自动换行的OpenXML,PresentationML表高度和行高

时间:2012-03-05 06:02:34

标签: c# powerpoint openxml openxml-sdk presentationml

我是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;

2 个答案:

答案 0 :(得分:1)

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

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

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

现在,当您使用行填充每张幻灯片时,请计算您在rowCount变量中插入的行数。在rowCount&lt; maxTableRowsPerSlide时插入行product.Name,然后开始新的幻灯片。

对于每一行 - 如果maxLengthBeforeOverflow的长度是&gt; rowCount您可以将product.Name长度除以maxLengthBeforeOverflow来增加{{1}},以获得此行包含的数字行。

答案 1 :(得分:1)

我有一个非常相似的question,发现通过Open XML SDK填充表时,表的高度没有更新。只有在Power Point中实际打开演示文稿时才会更新它。这显然不会帮助您在代码中弄清楚何时将表格拆分为新幻灯片,但如果您尝试使用此answer,则可能有所帮助。