3

OpenXML SDKでC#を使用して、特定の数の列を含めるようにExcelページ分割を設定する方法を知っている人はいますか?私がやりたいのは、x列を1ページに表示することです。私は当初、印刷領域を設定することでそれができると思っていましたが、そうではありません。これを行うための参照が見つかりません。

これは、Excelスプレッドシートの「ページ分割ビュー」で手動で実行されます。このビューでは、垂直の点線をドラッグして、より多くの列を含めます。

ありがとう

4

1 に答える 1

2

OpenXML SDKは、手動の水平ページ分割と手動の垂直ページ分割を区別します。

  • 手動の水平ページ分割を使用すると、特定の行ID(インデックス)の上に分割を指定できます。
  • 垂直ページ分割を使用すると、指定した列ID(インデックス)の左側に分割を指定できます。

プログラムで水平ページ分割を挿入するには、RowBreaksandBreakクラスを使用します。このRowBreaksクラスは、ワークシート内のすべての水平ページ分割のコレクションを表します。

ColumnBreaksandクラスを使用するBreakと、垂直方向のページ分割を挿入できます。この ColumnBreaksクラスは、ワークシートのすべての垂直ページ分割を保持します。

次の例は、垂直ページ分割の挿入を示しています。この関数InsertVerticalPageBreak()は、columnIndex(ページ分割を挿入する必要がある場所)とWorksheetPartを受け取ります。この関数は、最初にワークシートに ColumnBreaksコレクションがすでに含まれているかどうかを確認します。そうでない場合は、作成されます。Break次に、関数はクラスのインスタンスを作成し、Idプロパティを列インデックスに設定します。また、プロパティを、Excelが処理できる最大行数に設定してMax、垂直方向のページ分割を継続します。プロパティManualPageBreaktrueに設定することにより、手動のページ分割を指定します。

また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++;
}
于 2012-07-08T18:43:58.463 に答える