## よくある質問と解決策

### 1. Excelテンプレートで空の列やセルがレンダリング結果に表示されない

**問題の説明**: Excelテンプレートで、セルに内容やスタイルが設定されていない場合、レンダリング時にそのセルが削除され、最終的なドキュメントでセルが欠落することがあります。

**解決策**:

- **背景色を設定する**: 対象範囲の空のセルに背景色を設定し、レンダリング中もセルが表示されるようにします。
- **スペースを挿入する**: 空のセルにスペース文字を挿入し、内容がなくてもセルの構造を維持します。
- **罫線を設定する**: テーブルに罫線スタイルを追加してセルの境界を明確にし、レンダリング時にセルが消えるのを防ぎます。

**例**:

Excelテンプレートで、すべての対象セルに薄いグレーの背景色を設定し、空のセルにスペースを挿入します。

### 2. セルの結合が出力時に無効になる

**問題の説明**: ループ機能を使ってテーブルを出力する際、テンプレートに結合されたセルがあると、結合効果が失われたり、データがずれたりするなど、レンダリング結果が異常になることがあります。

**解決策**:

- **結合されたセルの使用を避ける**: ループ出力するテーブルでは、データの正しいレンダリングを確実にするため、結合されたセルの使用はできるだけ避けてください。
- **「選択範囲内で中央」を使用する**: 複数のセルにわたってテキストを水平方向の中央に配置したい場合は、セルの結合ではなく「選択範囲内で中央」機能を使用できます。
- **結合されたセルの位置を制限する**: セルの結合がどうしても必要な場合は、テーブルの上部または右側でのみ結合し、下部や左側での結合は避けてください。これにより、レンダリング時の結合効果の消失を防ぎます。

### 3. ループレンダリング領域の下にあるコンテンツが書式を崩す

**問題の説明**: Excelテンプレートで、データ項目に基づいて動的に行が増えるループ領域（例：注文明細）の下に、別のコンテンツ（例：注文概要、備考）がある場合、レンダリング時にループで生成されたデータ行が下方向に拡張し、下にある静的なコンテンツを直接上書きしたり押し下げたりして、最終的なドキュメントの書式が崩れたり、コンテンツが重なったりすることがあります。

**解決策**:

  * **レイアウトを調整し、ループ領域を最下部に配置する**: これは最も推奨される方法です。ループレンダリングが必要なテーブル領域をワークシート全体の最下部に配置します。元々その下にあった集計や署名などの情報はすべてループ領域の上に移動させます。これにより、ループデータは他のどの要素にも影響を与えることなく、自由に下方向に拡張できます。
  * **十分な空白行を確保する**: ループ領域の下にコンテンツを配置する必要がある場合は、ループによって生成される可能性のある最大行数を予測し、ループ領域と下のコンテンツの間に十分な空白行をバッファとして手動で挿入します。ただし、この方法にはリスクがあり、実際のデータが予測行数を超えると、問題が再発します。
  * **Wordテンプレートを使用する**: レイアウト要件が複雑で、Excelの構造調整では解決できない場合は、Wordドキュメントをテンプレートとして使用することを検討してください。Wordのテーブルは、行数が増えても下にあるコンテンツを自動的に後方に移動させるため、コンテンツが上書きされる問題が発生せず、このような動的なドキュメントの生成により適しています。

**例**:

**誤ったテンプレート**: 「注文概要」情報を、ループする「注文明細」テーブルのすぐ下に配置する。
![20250820080712](https://static-docs.nocobase.com/20250820080712.png)

**正しい方法 1（レイアウトの調整）**: 「注文概要」情報を「注文明細」テーブルの上に移動させ、ループ領域をページの最下部の要素にします。
![20250820082226](https://static-docs.nocobase.com/20250820082226.png)

**正しい方法 2（空白行の確保）**: 「注文明細」と「注文概要」の間に十分な空白行を確保し、ループコンテンツが拡張するスペースを確保します。
![20250820081510](https://static-docs.nocobase.com/20250820081510.png)

**正しい方法 3**: Wordテンプレートを使用します。

### 4. テンプレートのレンダリング中にエラーが表示される

**問題の説明**: テンプレートのレンダリング中に、システムがエラーメッセージを表示し、レンダリングが失敗します。

**考えられる原因**:

- **プレースホルダーのエラー**: プレースホルダー名がデータセットのフィールドと一致しない、または構文エラーがある。
- **データの欠落**: データセットにテンプレートで参照されているフィールドがない。
- **フォーマッターの不適切な使用**: フォーマッターのパラメーターが間違っている、またはサポートされていないフォーマットタイプである。

**解決策**:

- **プレースホルダーを確認する**: テンプレート内のプレースホルダー名がデータセット内のフィールド名と一致し、構文が正しいことを確認します。
- **データセットを検証する**: データセットにテンプレートで参照されているすべてのフィールドが含まれており、データ形式が要件を満たしていることを確認します。
- **フォーマッターを調整する**: フォーマッターの使用方法を確認し、パラメーターが正しいこと、およびサポートされているフォーマットタイプを使用していることを確認します。

**例**:

**誤ったテンプレート**:
```
注文番号：{d.orderId}
注文日：{d.orderDate:format('YYYY/MM/DD')}
合計金額：{d.totalAmount:format('0.00')}
```

**データセット**:
```json
{
  "orderId": "A123456789",
  "orderDate": "2025-01-01T10:00:00Z"
  // totalAmount フィールドがありません
}
```

**解決策**: データセットに `totalAmount` フィールドを追加するか、テンプレートから `totalAmount` への参照を削除します。