OpenXML SDKでC#を使用して、特定の数の列を含めるようにExcelページ分割を設定する方法を知っている人はいますか?私がやりたいのは、x列を1ページに表示することです。私は当初、印刷領域を設定することでそれができると思っていましたが、そうではありません。これを行うための参照が見つかりません。
これは、Excelスプレッドシートの「ページ分割ビュー」で手動で実行されます。このビューでは、垂直の点線をドラッグして、より多くの列を含めます。
ありがとう
OpenXML SDKでC#を使用して、特定の数の列を含めるようにExcelページ分割を設定する方法を知っている人はいますか?私がやりたいのは、x列を1ページに表示することです。私は当初、印刷領域を設定することでそれができると思っていましたが、そうではありません。これを行うための参照が見つかりません。
これは、Excelスプレッドシートの「ページ分割ビュー」で手動で実行されます。このビューでは、垂直の点線をドラッグして、より多くの列を含めます。
ありがとう
OpenXML SDKは、手動の水平ページ分割と手動の垂直ページ分割を区別します。
プログラムで水平ページ分割を挿入するには、RowBreaks
andBreak
クラスを使用します。このRowBreaks
クラスは、ワークシート内のすべての水平ページ分割のコレクションを表します。
ColumnBreaks
andクラスを使用するBreak
と、垂直方向のページ分割を挿入できます。この
ColumnBreaks
クラスは、ワークシートのすべての垂直ページ分割を保持します。
次の例は、垂直ページ分割の挿入を示しています。この関数InsertVerticalPageBreak()
は、columnIndex(ページ分割を挿入する必要がある場所)とWorksheetPartを受け取ります。この関数は、最初にワークシートに
ColumnBreaks
コレクションがすでに含まれているかどうかを確認します。そうでない場合は、作成されます。Break
次に、関数はクラスのインスタンスを作成し、Id
プロパティを列インデックスに設定します。また、プロパティを、Excelが処理できる最大行数に設定してMax
、垂直方向のページ分割を継続します。プロパティManualPageBreak
をtrue
に設定することにより、手動のページ分割を指定します。
またInsertHorizontalPageBreak()
、サンプルに関数を追加して、水平方向のページ分割を追加する方法を示しました。
private void InsertPageBreaks()
{
uint columnIndex = 17U;
uint rowIndex = 51U;
using (SpreadsheetDocument sd = SpreadsheetDocument.Open("c:\\temp\\spreadsheet.xlsx", true))
{
WorkbookPart workbookPart = sd.WorkbookPart;
WorksheetPart worksheetPart = workbookPart.WorksheetParts.Last();
// Uncomment the following line to insert row page breaks.
// InsertHorizontalPageBreak(rowIndex, worksheetPart);
InsertColumnVerticalBreak(columnIndex, worksheetPart);
}
}
private void InsertHorizontalPageBreak(uint rowIndex, WorksheetPart worksheetPart)
{
Break rowBreak =
new Break() { Id = (UInt32Value)rowIndex, Max = (UInt32Value)16383U, ManualPageBreak = true };
RowBreaks rb = worksheetPart.Worksheet.GetFirstChild<RowBreaks>();
if (rb == null)
{
rb = new RowBreaks();
rb.ManualBreakCount = (UInt32Value)0;
rb.Count = (UInt32Value)0;
worksheetPart.Worksheet.Append(rb);
}
rb.Append(rowBreak);
rb.ManualBreakCount++;
rb.Count++;
}
private void InsertVerticalPageBreak(uint columnIndex, WorksheetPart worksheetPart)
{
ColumnBreaks cb = worksheetPart.Worksheet.GetFirstChild<ColumnBreaks>();
if (cb == null)
{
cb = new ColumnBreaks();
cb.ManualBreakCount = (UInt32Value)0;
cb.Count = (UInt32Value)0;
worksheetPart.Worksheet.Append(cb);
}
Break br =
new Break() { Id = (UInt32Value)columnIndex, Max = (UInt32Value)1048575U, ManualPageBreak = true };
cb.Append(br);
cb.ManualBreakCount++;
cb.Count++;
}