スタイルXML
スタイルXMLは、レイアウトXMLのスタイル定義を外部化・共通化するものです。 HTMLにおけるCSSに相当します。
スタイルXMLは必須ではありませんが、作成すると以下のようなことが可能になります。
- 帳票テンプレート全体のデフォルトスタイル(各要素の属性の既定値)を上書き
- 既定フォントを明朝体に変更するような使い方が典型例です。
- 繰り返し使用するスタイルを名前付きで定義し、レイアウトXMLから参照
- CSSのクラスに準ずる機能です。
- グリッドライク要素(
<Grid><Table><ColumnText>)に対して、セル範囲を指定してスタイルを適用- これはスタイルXMLにのみ存在する機能です。
スタイルXMLを使う
スタイルXMLを使用するには、スタイルXMLファイルを作成し、帳票テンプレートファイルに追加します。
以下の内容で style.xml を作成します。
スタイルXMLの記述方法については、後ほど解説します。
<Style
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schemas.yagisan.app/2025.1/style.xsd"
>
</Style>
スタイルXMLを帳票テンプレートファイルに追加するには、yagisanコマンドで -S オプションを指定します。
npx yagisan yrt pack layout.xml \
-O template.yrt \
-S style.xml
ルート要素
スタイルXMLのルート要素は <Style> です。
レイアウトXMLと同様に、以下のようにXML Schemaを指定可能です。 XML Schemaの指定があることで、XML Schema対応エディターで入力補完やバリデーションが効くようになります。
<Style
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schemas.yagisan.app/2025.1/style.xsd"
>
スタイル要素
スタイルXMLでルート要素以下に記述する要素のことを「スタイル要素」と呼び、具体的なスタイル定義はこれに記述します。 大きく分けて、以下の2つの記述方法があります。
指定した要素にスタイルを適用する
レイアウトXMLの指定した要素に適用するスタイルは、以下のように記述します。
- スタイルを適用したいレイアウトXMLの要素と同名の要素を記述する。
- レイアウトXMLでは親子関係がある要素であっても、スタイルXMLでは入れ子にせず
<Style>要素の直下に並べる。
- レイアウトXMLでは親子関係がある要素であっても、スタイルXMLでは入れ子にせず
- レイアウトXMLに存在する属性と同じ属性を記述する。
- レイアウトXMLでは必須属性であっても、スタイルXMLでは全て省略できる。
key属性でスタイル名を指定する。key属性は指定を省略できるが、後述のように指定の有無で挙動が異なるため、用途に応じて使い分ける。
<Style
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schemas.yagisan.app/2025.1/style.xsd"
>
<Text fontFamily="mincho" />
<GridCell key="header" backgroundColor="K10" />
</Style>
key 属性の指定の有無で、以下のように挙動が異なります。
- 指定しない場合
- 帳票テンプレート全体のデフォルトスタイルを上書きします。
<Text fontFamily="mincho" />と定義した場合、レイアウトXMLで記述された全ての<Text>要素に対してfontFamily属性の既定値がminchoに設定されます。
- 指定する場合
- レイアウトXMLで
style属性で参照された場合のみ、スタイルが適用されます。 style属性の値は、key属性で指定したスタイル名を1つだけ指定可能です。
- レイアウトXMLで
レイアウトXMLの一部の要素・属性はスタイルXMLには対応していません。 テンプレートリファレンスで「スタイルXML対応」の旨で明記されているものに限り、スタイル要素として記述できます。
指定したセル範囲にスタイルを適用する
<CellRange> <CellRangeList> 要素を使うことで、グリッドライク要素(<Grid> <Table> <ColumnText>)の指定したセル範囲にスタイルを適用できます。
この2つの要素は、スタイルXMLにのみ存在します。
グリッドライク要素では、 <CellRange> <CellRangeList> 要素のスタイル指定を特別扱いして、最優先で適用します。
複雑な表組み・罫線設定が必要となるケースで使用することを想定しています。
以下は、<CellRange> <CellRangeList> 要素の記述例です。
<Style
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schemas.yagisan.app/2025.1/style.xsd"
>
<CellRangeList key="style1">
<CellRange col="0" row="all" backgroundColor="K10" />
<CellRange col="1" row="1" borderThickness="thick" />
</CellRangeList>
</Style>
<CellRangeList>
<CellRangeList> 要素は、複数の <CellRange> 要素をまとめる要素です。
<Style> 要素の直下に記述します。
key属性でスタイル名を設定します。<CellRangeList>要素ではkey属性の指定が必須です。
- レイアウトXMLから
<CellRangeList>を参照するには、style属性ではなく、rangeStyle属性を使います。rangeStyle属性はグリッドライク要素でのみ使用可能です。rangeStyle属性で指定可能なスタイル名は1つだけです。
以下の例では、レイアウトXMLの <Grid> 要素から <CellRangeList> スタイルを参照しています。
<Grid cols="* *" rows="10 10" rangeStyle="style1">
<GridCell col="0" row="0" />
<GridCell col="1" row="0" />
<GridCell col="0" row="1" />
<GridCell col="1" row="1" />
</Grid>
<CellRange>
<CellRange> 要素は、セル範囲を指定してスタイルを定義する要素です。
<CellRangeList> 要素の子要素として複数記述できます。
セル範囲は col row 属性で指定します。
以下のような値が指定可能です。
n: 固定値(nは整数値)n::n以上(nは整数値):m:m以下(mは整数値)n:m:n以上m以下(n, mは整数値)all: 全範囲を指定
上記の n と m に指定した整数値は、以下のように解釈されます。
0を指定すると、最初の行または列を指定したものとして扱う。- 負の値を指定すると、末尾からの位置を指定したものとして扱う。
col row 属性は両方とも省略可能です。
未指定の場合は all が指定されたものとして扱います。
<CellRange> 要素では、以下のスタイル属性が指定可能です。
borderXxx 属性と outerBorderXxx 属性を同時に指定した場合、外枠部分では outerBorderXxx の値が優先されます。
| 属性 | 概要 |
|---|---|
| borderThickness | 外枠と内枠の罫線の太さを設定します。 |
| borderColor | 外枠と内枠の罫線の色を設定します。 |
| borderStyle | 外枠と内枠の罫線のスタイルを設定します。 |
| outerBorderThickness | 外枠のみの罫線の太さを設定します。 |
| outerBorderColor | 外枠のみの罫線の色を設定します。 |
| outerBorderStyle | 外枠のみの罫線のスタイルを設定します。 |
| backgroundColor | 背景色を設定します。 |
<CellRange> 要素は複数記述できるため、指定したセル範囲が重なる場合があります。
その場合、重なった部分については、後から記述された <CellRange> 要素の指定値が優先されます。
スタイルXMLの制限事項
スタイル名の重複
同じスタイル名(key 属性の値が同じもの)のスタイル要素を重複して定義することはできません。
<CellRangeList> 要素は他のスタイル要素と違い、rangeStyle 属性で参照されますが、同様に key 属性の値を重複定義することはできません。
以下の例では、style1 というスタイル名が重複定義されているため、エラーとなります。
<Style
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schemas.yagisan.app/2025.1/style.xsd"
>
<Text key="style1" fontFamily="mincho" />
<CellRangeList key="style1">
<CellRange col="0" row="all" backgroundColor="K10" />
</CellRangeList>
</Style>
また、key 属性を指定しないスタイル要素も、各要素ごとに1つだけしか定義できません。
以下の例では、key 属性のない <Text> 要素が複数存在するため、エラーとなります。
<Style
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schemas.yagisan.app/2025.1/style.xsd"
>
<Text fontFamily="mincho" />
<Text bold="true" />
</Style>
テンプレート変数の使用
スタイルXMLでは、テンプレート変数を使用できません。