我有一堆数据需要从网站导出到 PowerPoint 演示文稿,并且一直在使用 Open XML SDK 2.0 来执行此任务。我有一个 PowerPoint 演示文稿,我正在通过 Open XML SDK 2.0 Productivity Tool 生成可用于重新创建导出的模板代码。
在其中一张幻灯片上,我有一个表格,如果表格超出幻灯片的底部,则要求将数据添加到该表格并在多张幻灯片中拆分该表格。我采用的方法是确定表格的高度,如果它超过幻灯片的高度,则将新内容移动到下一张幻灯片中。我已经阅读了Bryan 和 Jones关于将重复数据添加到 PowerPoint 幻灯片的博客,但我的情况有点不同。他们使用以下代码:
A.Table tbl = current.Slide.Descendants<A.Table>().First();
A.TableRow tr = new A.TableRow();
tr.Height = heightInEmu;
tr.Append(CreateDrawingCell(imageRel + imageRelId));
tr.Append(CreateTextCell(category));
tr.Append(CreateTextCell(subcategory));
tr.Append(CreateTextCell(model));
tr.Append(CreateTextCell(price.ToString()));
tbl.Append(tr);
imageRelId++;
这对我不起作用,因为他们知道将表格行设置为什么高度,因为它将是图像的高度,但是当添加不同数量的文本时,我不知道提前的高度,所以我只是设置tr.Height
为默认值。这是我计算桌子高度的尝试:
A.Table tbl = tableSlide.Slide.Descendants<A.Table>().First();
A.TableRow tr = new A.TableRow();
tr.Height = 370840L;
tr.Append(PowerPointUtilities.CreateTextCell("This");
tr.Append(PowerPointUtilities.CreateTextCell("is"));
tr.Append(PowerPointUtilities.CreateTextCell("a"));
tr.Append(PowerPointUtilities.CreateTextCell("test"));
tr.Append(PowerPointUtilities.CreateTextCell("Test"));
tbl.Append(tr);
tableSlide.Slide.Save();
long tableHeight = PowerPointUtilities.TableHeight(tbl);
以下是辅助方法:
public static A.TableCell CreateTextCell(string text)
{
A.TableCell tableCell = new A.TableCell(
new A.TextBody(new A.BodyProperties(),
new A.Paragraph(new A.Run(new A.Text(text)))),
new A.TableCellProperties());
return tableCell;
}
public static Int64Value TableHeight(A.Table table)
{
long height = 0;
foreach (var row in table.Descendants<A.TableRow>()
.Where(h => h.Height.HasValue))
{
height += row.Height.Value;
}
return height;
}
这正确地将新表格行添加到现有表格中,但是当我尝试获取表格的高度时,它返回原始高度而不是新高度。新高度指的是我最初设置的默认高度,而不是插入大量文本后的高度。似乎只有在 PowerPoint 中打开高度时才会重新调整高度。
我还尝试访问该行中最大表格单元格的高度,但似乎找不到执行该任务的正确属性。
我的问题是如何确定动态添加的表格行的高度,因为它似乎在 PowerPoint 中打开之前不会更新行的高度?在使用 Open XML SDK 2.0 时确定何时将内容拆分到另一张幻灯片的任何其他方法?我对有人可能采取的更好方法的任何建议持开放态度,因为没有太多关于这个主题的文档。