2012-03-05 21 views
4

Open Xmlを初めて使用し、Open Xml SDKを使用してレポートアプリケーションを作成しました。これは、テーブルにデータを入力し、テーブルの高さがスライドボーダーのクローンを超えたときにスライドし、次のデータセットを新しいスライドに挿入します。すべて正常に動作しますが、行の一部が2行に折り返されたデータの場合は、正確な場所で新しいページに折れて失敗します。なぜなら、Open XMLは、データの1行があるときに行の高さと同じ行の高さを返すからです。これを解決する方法はありますか?あなたは上記のあなたのすべての列が固定されていると仮定できる場合OpenXML、PresentationMLワードラップのテーブルの高さと行の高さ

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 ..私はその質問を以前に見ました:)。テキストのレイアウト領域を計算するときに、セルマージン、パディング、インデントが考慮されていることを確認する必要がありますか?あなたがこれを達成したら、何らかの情報源を共有してもいいですか? – Aneef

+0

あなたはパディングとマージンも考慮に入れる必要があると言うとき、あなたは正しいです。私は決して解決策を見いだせなかったので、その質問に対する正解をマークしたことはありませんでした。私は顧客に戻って、この制限のための許容可能な回避策を得ました。 – amurra

1

:ここ

は、改ページのロジックを実行するコードの一部です(CreateTextCellは、テキストセルを作成し、返すメソッドです)最初の列が product.Nameで、フォントスタイルが同じである場合を除き、テーブルの高さ>境界を確認する代わりに次の方法を使用できます。

まず、プレゼンテーションをPowerPointで開いて、テーブルを使ってスライドに移動します。固定幅の列データを入力します。最初の列に改行が来るまで「XXXX ....」と入力し、改行前の文字数を数えます。この番号はmaxLengthBeforeBreak

です。この行をコピーアンドペーストして、スライドに表示される表の最大数がユーザにとって魅力的になるまで、表の行を塗りつぶします。この行の数はmaxTableRowsPerSlide

ですあなたが行の各スライドを埋めるとき

さて、あなたはrowCount変数に挿入する行の数を数える。rowCount < maxTableRowsPerSlideは、その後、新しいスライドを開始しながら、行を挿入します。

各行についてからproduct.Nameの長さがある場合>maxLengthBeforeOverflowあなたは数行にこの行のラップを得るためにmaxLengthBeforeOverflowproduct.Name長さを分割することによりrowCountをインクリメントすることができます。

+0

回答ありがとうございますが、問題はすべての列データが動的に駆動されることです。これはデータのパターンに過ぎません。もっと多くのシナリオがあるかもしれません。基本的に私はこれを処理する共通の方法が必要です。 – Aneef

関連する問題