2012-03-05 108 views
4

我是Open Xml的新手,並使用Open Xml SDK創建了報表應用程序。它將數據填充到表格中,並且當表格高度超過幻燈片邊框時,將幻燈片克隆並填充新幻燈片中的下一組數據等等。所有的工作都很好,但是當一些行有數據包裝成2行時,無法在確切的地方插入新頁面。看起來原因是當有單行數據時,Open Xml仍然返回與行高相同的行高。無論如何解決這個問題。OpenXML,PresentationML表格高度和換行高度

下面是一段代碼,做分頁邏輯(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; 

回答

1

我有一個非常相似的question,發現當通過Open XML SDK填充表格時,表的高度沒有更新。只有在Power Point中實際打開演示文稿時纔會更新它。這顯然無法幫助您在代碼中分辨何時將表格拆分爲新的幻燈片,但如果您嘗試使用answer,則可能會有所幫助。

+0

amura .. of course我以前見過這個問題:)。但是在計算文本的版面區域時,我們需要確保單元格邊距,填充和縮進都被考慮在內?如果你已經達到這個目標,你會介意分享一些資源嗎? – Aneef 2012-03-07 09:44:53

+0

當你說填充和保證金需要考慮時,你是對的。我從來沒有在這個問題上標出正確答案,因爲我從未找到解決方案。我回到我們的客戶身邊,得到了一個可以接受的解決方法。 – amurra 2012-03-07 15:21:56

1

如果你可以假設上述所有的列都是固定的寬度,但使用product.Name的第一列除外,並且字體樣式相同,則可以使用以下方法而不是檢查表格高度>邊框。

首先,在PowerPoint中打開演示文稿並轉到幻燈片中。輸入固定寬度的列數據。然後在第一列中輸入'XXXX ....'直到換行符爲止,計算換行符前的字符數,該數字將爲maxLengthBeforeBreak

第二,從上面的第一步清除並輸入在不會換行的類似行中複製並粘貼此行,然後在幻燈片中填充表格,直至您的幻燈片的最大行數看起來吸引用戶,該行數將爲maxTableRowsPerSlide

現在,當你填入行每一張幻燈片,算你在rowCount變量插入的行數。插入行而rowCount < maxTableRowsPerSlide,然後開始一個新的幻燈片。

並且對於每一行 - 如果product.Name的長度爲>maxLengthBeforeOverflow,則可以將長度除以maxLengthBeforeOverflow以增加rowCount以獲得此行換行的數字行。

+0

感謝您的迴應,但問題是所有列數據都是動態驅動的,而這只是一種數據模式。可能還會有更多的其他場景。基本上我需要一個常用的方法來處理這個問題 – Aneef 2012-03-06 08:11:40