誰でもOpenXmlのスタイルインデックスの仕組みを説明できますか? Excelシートの特定のセルに背景色を適用する必要があるというビジネス要件があります。そして、いくつかのスタイルはすでに他のセルに適用されています。したがって、適用する必要のあるインデックスを決定する必要があります。
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
レコードのゼロから始まるインデックスです。
スタイル部分(ワークブックのスタイルシート)には、次のセクションが含まれています。
これで、CellFormat
レコード内に、スタイルシートの次の各セクションを参照する参照があります。
コードのセル形式の例は次のようになります。
// 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
に作成します。この新しいCellFormat
をCellFormat
セクションの最後に追加します。新しいCellFormat
のインデックスが53
になるとしましょう。
ステップ3.インデックス53
でCellFormat
を更新し、そのFill
インデックスプロパティを25
にします(ステップ1から)。
最終ステップ:問題のセルB3
を更新して、新しいStyleIndex
of 53
を取得します
注:この回答はExcelの非テーブルセルのスタイリングに関するものです-テーブルセルのスタイリング情報が必要な場合は、返信してください。それに対する答え。
この回答は、主に私の経験と、無料の電子書籍の73〜79ページの解釈から得られます。Open XML-マークアップの説明-Wouter van Vugtによる。これは、すべてのOpenXmlで使用するのに適したリファレンスです。