我有一大堆數據需要從網站導出到PowerPoint演示文稿,並且已使用Open XML SDK 2.0執行這個任務。我有一個PowerPoint演示文稿,我正在通過Open XML SDK 2.0生產力工具生成可用於重新創建導出的模板代碼。如何使用Open XML SDK 2.0從內容流出當前幻燈片時將表格拆分爲新的PowerPoint幻燈片
在其中一張幻燈片上,我有一個表格,並且要求將數據添加到該表格,並在表格超出幻燈片底部時將該表格分割到多張幻燈片中。我採取的方法是確定表格的高度,如果它超過幻燈片的高度,請將該新內容移動到下一張幻燈片中。我已閱讀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.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時確定何時將內容拆分到另一張幻燈片的其他方法?對於有人可能採取的更好方法的任何建議,我都樂於接受,因爲關於此主題的文檔不多。
是啊,我的意思是,這是我快要落山的路徑,但沒有任何運氣。尋找更多的代碼工作示例。 – amurra 2010-08-23 12:10:38
@Otaku:我從來沒有找到解決這個問題的方法,並且由於時間是我項目中的一個問題,我們決定讓數據從幻燈片中移出並讓最終用戶重新格式化數據。 – amurra 2010-09-16 12:52:06