web-dev-qa-db-ja.com

Open xmlでスタイルインデックスを使用する方法

誰でもOpenXmlのスタイルインデックスの仕組みを説明できますか? Excelシートの特定のセルに背景色を適用する必要があるというビジネス要件があります。そして、いくつかのスタイルはすでに他のセルに適用されています。したがって、適用する必要のあるインデックスを決定する必要があります。

8

OpenXMLのスタイル設定を最初に見ると、混乱する可能性があります。 Excelドキュメントのスタイル設定は、WordおよびPowerPointとは異なるSpreadsheetMLマークアップ言語に該当します。

Excelの一般的なセルの場合、必要なスタイル情報は(指摘したように)StyleIndexだけです。

Cell cell16 = new Cell(){ CellReference = "HU1", StyleIndex = (UInt32Value)1U, DataType = CellValues.SharedString };

これは、XMLのs属性に対応します。

      <x:c r="HU1" s="1" t="s">
        <x:v>0</x:v>
      </x:c>

StyleIndexは、スタイルパーツのCellFormatレコードのゼロから始まるインデックスです。

スタイル部分(ワークブックのスタイルシート)には、次のセクションが含まれています。

  • 番号付けフォーマット
  • 書体
  • 塗りつぶし
  • 国境
  • セルスタイルの形式
  • セル形式<==セルstyleindexはこれらのいずれかを参照しています
  • セルスタイル
  • 差分フォーマット
  • テーブルスタイル
  • スタイルシート拡張リスト

これで、CellFormatレコード内に、スタイルシートの次の各セクションを参照する参照があります。

  1. 番号付け形式(上記の最初の箇条書き)
  2. フォント(上記の2番目の箇条書き)
  3. 埋める(上記の3番目の箇条書き)
  4. ボーダー(上記の4番目の箇条書き)

コードのセル形式の例は次のようになります。

// this line is important to your question
CellFormat cellFormat5 = new CellFormat(){ NumberFormatId = (UInt32Value)0U, FontId = (UInt32Value)0U, FillId = (UInt32Value)0U, BorderId = (UInt32Value)11U, 
//the rest of the CellFormat definition is not so important to your question
FormatId = (UInt32Value)0U, ApplyFill = true, ApplyBorder = true, ApplyAlignment = true };

あなたの質問に答えるには:特定の背景色を特定のセルに適用します。スプレッドシートのセルB3を更新したいとします。B3にはすでにStyleIndex of 10があります。

次の手順に従う必要があります。

手順1.これがスプレッドシートの新しい背景色である場合は、新しい色を含む背景(上記の3番目の箇条書き)のスタイルシートのFillセクションに背景(別名Fills)を追加します。色がすでに存在する場合は、その色の既存のFillのインデックスを見つけて覚えておく必要があります。どちらにしても、この例では、必要なFillインデックスが25であるとしましょう。

ステップ2. CellFormatのコピーである新しいCellFormatをインデックス10に作成します。この新しいCellFormatCellFormatセクションの最後に追加します。新しいCellFormatのインデックスが53になるとしましょう。

ステップ3.インデックス53CellFormatを更新し、そのFillインデックスプロパティを25にします(ステップ1から)。

最終ステップ:問題のセルB3を更新して、新しいStyleIndex of 53を取得します

:この回答はExcelの非テーブルセルのスタイリングに関するものです-テーブルセルのスタイリング情報が必要な場合は、返信してください。それに対する答え。

この回答は、主に私の経験と、無料の電子書籍の73〜79ページの解釈から得られます。Open XML-マークアップの説明-Wouter van Vugtによる。これは、すべてのOpenXmlで使用するのに適したリファレンスです。

12
Taterhead