我是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;
答案 0 :(得分:1)
如果您可以假设上面的所有列都是固定宽度,除了使用product.Name
的第一列,并且您的字体样式相同,那么您可以使用以下方法而不是检查桌子高度&gt;边界。
首先,在PowerPoint中打开演示文稿,然后转到带有表格的幻灯片。输入固定宽度列数据。然后在第一列中输入“XXXX ....”直到换行。计算换行符前的字符数。这个数字将为maxLengthBeforeBreak
其次,清除上面第一步中的行并输入一个不换行的类似行。复制并粘贴此行并在幻灯片中填充表格,直到您拥有看起来对用户有吸引力的幻灯片的最大行数。此行数将为maxTableRowsPerSlide
现在,当您使用行填充每张幻灯片时,请计算您在rowCount
变量中插入的行数。在rowCount
&lt; maxTableRowsPerSlide
时插入行product.Name
,然后开始新的幻灯片。
对于每一行 - 如果maxLengthBeforeOverflow
的长度是&gt; rowCount
您可以将product.Name
长度除以maxLengthBeforeOverflow
来增加{{1}},以获得此行包含的数字行。
答案 1 :(得分:1)