在其中一张幻灯片上,我有一张表,要求是向该表添加数据,如果表格超出幻灯片的底部,则会在多张幻灯片中中断该表格.我采取的方法是确定表格的高度,如果它超过幻灯片的高度,将新内容移动到下一张幻灯片中.我已经阅读了Bryan and 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 .Heightto默认值.这是我在桌子高度计算的尝试:
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时,还有其他方法可以确定何时将内容拆分到另一张幻灯片?我对任何人可能采取的更好方法的建议持开放态度,因为没有太多关于这个主题的文件.
解决方法
这是一篇很好的文章,学习如何在.NET中测量渲染文本:http://www.devsource.com/c/a/Languages/Text-Metrics-in-the-Net-Framework-Part-I/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。