4

私は Open Xml を初めて使用し、Open Xml SDK を使用してレポート アプリケーションを作成しました。データをテーブルに入力し、テーブルの高さがスライドの境界線を超えると、スライドを複製し、次のデータ セットを新しいスライドに入力します。すべて正常に動作しますが、一部の行に 2 行に折り返されるデータがある場合、正確な場所で新しいページに割り込むことができません。その理由は、Open Xml が 1 行のデータがある場合でも、行の高さと同じ行の高さを返すためです。これを解決する方法はありますか。

ページネーション ロジックを実行するコードを次に示します (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;
4

2 に答える 2

1

非常によく似た質問があり、Open XML SDK を介してテーブルにデータを入力すると、テーブルの高さが更新されないことがわかりました。プレゼンテーションが実際に Power Point で開かれたときにのみ更新されます。これは明らかに、テーブルを新しいスライドに分割するタイミングをコードで把握するのに役立ちませんが、この回答を試してみると役立つ場合があります。

于 2012-03-06T16:24:39.307 に答える
1

が使用されている最初の列を除いて、上記のすべての列が固定幅でproduct.Nameあり、フォント スタイルが同じであると想定できる場合は、テーブルの高さ > 境界線を確認する代わりに、次の方法を使用できます。

まず、プレゼンテーションを PowerPoint で開き、表のあるスライドに移動します。固定幅の列データを入力します。次に、最初の列に、改行まで「XXXX....」と入力します。改行の前の文字数を数えます。この数はmaxLengthBeforeBreak

次に、上記の最初のステップから行をクリアし、改行しない同様の行に入力します。この行をコピーして下に貼り付け、ユーザーにとって魅力的に見えるスライドの最大行数になるまで、スライドの表を埋めます。この行数はmaxTableRowsPerSlide

各スライドに行を入力したら、rowCount変数に挿入した行数を数えます。rowCount<の間に行を挿入しmaxTableRowsPerSlide、新しいスライドを開始します。

各行について - の長さproduct.Nameが >の場合、長 さを で割ってmaxLengthBeforeOverflowをインクリメントし、この行がラップする行数を取得できます。rowCountproduct.NamemaxLengthBeforeOverflow

于 2012-03-05T21:37:55.210 に答える