Excel の条件付き書式の定義方法(Open XML形式)

投稿者: | 8月 9, 2016

Excelの条件付き書式をExcel経由ではなく、XMLを直接いじって編集したくなり、ここ2週間ほどみっちと取り組んだ。

Open XML形式

Excel 2013以降は、Open XMLと呼ばれる規格が一般公開されている規格を使用して、データが維持・保存されるようになっている。

「.xlsx」の拡張子を「.zip」に変更して解凍するとXMLファイルの山がでてくる。つまり、XLSXは、XMLを一塊にしてZip圧縮したものといえる。

Excelシートの保存場所

Zipを解凍して、「xl\worksheets\」配下に、Sheet1.xmlのように1シート1XMLファイルで定義されている。

条件付き書式も、このファイルの末尾で定義されている。

条件付き書式

条件付き書式は大きき2種類の定義で構成されている。

  1. 条件付き書式を適用するセル範囲と適用する条件(5より大きい場合etc)定義
  2. 条件に当てはまったときにセルに適用する書式(背景色や文字色etc)

1の適用範囲と適用条件については、Excelシート「xl\worksheets\Sheet1.xml」のファイルで定義され、2の書式については、「xl\styles.xml」で定義される。

条件付き書式の適用範囲と適用条件の定義

XMLのルート直下で、<conditionalFormatting>タグで定義されます。ルート直下に、条件付き書式1つにつき、1つの<conditionalFormatting>……</conditionalFormatting>で定義されます。

<conditionalFormatting>の属性、sqrefで条件付き書式の適用範囲が定義されます。

<conditionalFormatting sqref="A1:D45">
<conditionalFormatting sqref="A1:D45 R4:U40">

上記のように範囲が定義され、複数の範囲を定義する場合には、半角スペースで区切る。

適用条件は、<conditionalFormatting>の子要素<cfRule>で定義される。<cfRule>の属性では、条件種類(type)、書式番号(dxfId)、優先順位(priority)が定義される。優先順位と条件種類は必ず定義されるが、書式番号は条件種類や書式未設定の場合には、定義されない。

<cfRule>は、次の種類のケースがある。

<cfRule>……………</cfRule>
<cfRule />

子要素がある場合と、子要素が無い場合の2パターンである。

<cfRule>の属性は次のようなケースがある。

<cfRule type = "hogehoge" dxfId = "3" priority = "5">……………</cfRule>
<cfRule type = "hogehoge" priority = "5">

typeで重複チェックなどが指定されると自動的に書式がさだまるので、dxfIdは指定されない。

条件付き書式の適用範囲は、各シート毎で記述される。

条件付き書式の書式の定義

条件付き書式の書式は、XMLのルート直下で、<dxfs>……………</dxfs>の間に定義される。個々の定義は、<dxf>で記述される。<dxf>で書式(背景色や文字色etc)を定義するが、書式番号は定義されていない。<dxf>の上からの順番で、1,2,3のように扱われる。

条件付き書式の定義で、dxfIdで示される。dxfId = "12" と記載されていると、<dxfs>タグの上から数えて12番を示す。条件付き書式の書式定義は全シート共通で、styles.xmlで定義される。

例えば、シート1でdxfIdが1,3,4,7とあり、シート2でdxfIdが2,5,6などとExcelファイル内で一意の連番がふられ、それの参照先は一ファイルで、ファイルの上から数えて何番目かで判定される。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください