4

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

2 回答 2

1

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

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

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

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

对于每一行- 如果 的长度product.Name>maxLengthBeforeOverflow您可以rowCount通过将product.Name长度 除以来增加maxLengthBeforeOverflow

于 2012-03-05T21:37:55.210 回答
1

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

于 2012-03-06T16:24:39.307 回答