2

縦にも横にも複数のページにまたがるワークシートがあります。各ページで繰り返すように設定された特定の行と列があります。これらの改ページがどこにあるのか知りたいです。基本的に、改ページ プレビューから C# コードに情報を取得して、ページ間で結合されたセルなどを修正したり、1 ページ幅の署名ボックスを追加したりしたいと考えています。

Worksheet.HPageBreaks プロパティを使用しようとしましたが、ワークシートに複数のページがあることがわかっている場合でも、HPageBreaks.Count プロパティは常に null です。

4

2 に答える 2

1

私の知る限りでは、Excel はそのデータを内部に保存するのではなく、PageSettings、PrinterSettings、手動で保存された "PageBreak" マーカー、およびセル サイズとコンテンツに基づいてリアルタイムに近い計算を行います。

私が提案できる最善の解決策は、これらを自分で計算することです。

私はまた、これについて完全に間違っている可能性があることを率直に認めますが、私自身の経験から、これは事実である可能性が高いです. //もし//私自身の研究が何か新しいものを見つけたら更新します.

更新: リンク

これはほとんど関係ありませんが、同じトピックです。おそらく、独自の目的のために操作できるいくつかの例またはデータが含まれています。

http://social.msdn.microsoft.com/Forums/sv/exceldev/thread/0d1fd9f2-9111-42c4-ad36-3082f4311202

于 2012-06-18T20:20:02.137 に答える
0

改ページの最後の行にカスタム フッターを配置するとします。

横向きの新しい空白のワークシートでは、ページの最後の行は行 34 です。

それを試してみてください!

  1. エクセルを開く
  2. 新しいワークシート
  3. セル A1 に「こんにちは」と入力します。

自動改ページ (点線) が表示されます。

行の高さが変わらない場合、各ページには 34 行あります。

したがって、フッターは 34 行ごとに配置します。 単純!

ただし、高さが異なる行がある場合は、より複雑になります。さあ、袖をまくり上げて、独自のアルゴリズムを調理する必要があります! 目標は、意図した場所に常に着地するオフセットを見つけることです

1 行 = 15 RowHeight ポイント (100% dpi) であることがわかっています。アプローチは、特定のセル内の改行数を見つけて、オフセットする行数を決定することです。

// cell w/ multiple lines of text 
Excel.Range rng = ws.get_Range("A3"); 

int lineBreakCnt = rng.Text.Count(x => x == '\n'); 

// if range is merged, it will not auto-adjust RowHeight. So:
int rowHeight = 15; // 15 points = 1 
int rowHeight = lineBreakCnt > 1 ? rowHeight * lineBreakCnt + (rowHeight / 2) : rowHeight * lineBreakCnt + rowHeight;

rng.RowHeight = rowHeight;

//Calc footer row
int footerRow = 34;

//depending how much cell contents push down, adjust footer row
if (lineBreakCnt == 1)
{
   footerRow -= (lineBreakCnt - 2) + 2;
}
else
if (lineBreakCnt > 1)
{
   footerRow -= (lineBreakCnt -2) + 1;
}

ws.get_Range("A" + footerRow).Formula = "Cool footer w/ formatted text here";

A3 に複数行のテキストを挿入してテストします。

これが役に立ったら、「いいね!」でサポートしてください。

于 2017-11-22T02:11:01.770 に答える