テンプレート内のテーブル - 動的テーブルガイド
表は専門的な文書の基本的な構成要素であり、データを構造的に提示することで、比較、参照、分析を容易にします。 PDF4meのドキュメント生成エンジンは、ソースからのデータで構成された動的なテーブルを効率的に作成します。
複数列テーブル構造
テーブルセル内にマージフィールドを定義することで、複数の列を持つテーブルを生成します。各行はデータ収集に基づいて繰り返されます。
基本的なテーブル構文
テーブル構造を作成します Word 以下のパターンを持つテンプレート:
Column 1: <<foreach [product in products]>><<[product.productName]>>
Column 2: <<[product.manufactured]:"yyyy.MM.dd">>
Column 3: <<[product.price]>><</foreach>>
テンプレート構造:
- テーブルを作成する Word 希望する列数
- 最初のセルにforeachループを配置する
- 同じ行の連続するセルに差し込みフィールドを追加する
- 最後のセルでforeachループを閉じます
例:製品在庫表
データソース(JSON):
{
"vendorName": "Instamart",
"products": [
{
"productName": "Laptops",
"price": 160000,
"manufactured": "25/07/2022"
},
{
"productName": "Keyboard",
"price": 10000,
"manufactured": "12/04/2022"
},
{
"productName": "Speakers",
"price": 25000,
"manufactured": "08/05/2022"
}
]
}
生成された出力:
| 製品名 | 製造 | 価格 |
|---|---|---|
| ノートパソコン | 2022年7月25日 | 160000 |
| キーボード | 2022年4月12日 | 10000 |
| 講演者 | 2022年5月8日 | 25000 |
表の計算と合計
列挙法を使用して、テーブル構造内の合計、平均、件数などの集計値を計算します。
合計計算
数値列の合計を計算するために、合計行を追加します。
Column 1: <<foreach [product in products]>><<[product.productName]>>
Column 2: <<[product.manufactured]:"yyyy.MM.dd">>
Column 3: <<[product.price]>><</foreach>>
Column 1: Total
Column 2:
Column 3: $<<[products.Sum(c => c.price)]>>
生成された出力:
| 製品名 | 製造 | 価格 |
|---|---|---|
| ノートパソコン | 2022年7月25日 | 160000 |
| キーボード | 2022年4月12日 | 10000 |
| 講演者 | 2022年5月8日 | 25000 |
| 合計 | 195,000ドル |
その他の集計関数
平均:
Average Price: $<<[products.Average(p => p.price)]:"F2">>
カウント:
Total Products: <<[products.Count()]>>
最大:
Highest Price: $<<[products.Max(p => p.price)]>>
最小:
Lowest Price: $<<[products.Min(p => p.price)]>>
単一列の表
1行に複数の情報行を含む単一列のテーブルを生成します。 -greedy 各コレクション項目が1行を占めるように切り替えます。
単一列テンプレート構文
<<foreach [product in products]>>Product: <<[product.productName]>>, Manufactured On: <<[product.manufactured]:"yyyy.MM.dd">>, Product Price: $<<[product.price]>><</foreach -greedy>>
重要なポイント: の -greedy switch文はコンテンツブロック全体を1行として扱い、不要な行の区切りを防ぎます。
生成された出力:
| 商品詳細 |
|---|
| 製品:ノートパソコン、製造日:2022年7月25日、製品価格:160,000ドル |
| 製品:キーボード、製造日:2022年4月12日、製品価格:10,000ドル |
| 製品:スピーカー、製造日:2022年5月8日、製品価格:25,000ドル |
高度なテーブルの例
例1:請求書明細項目表
テンプレート:
Item | Description | Qty | Unit Price | Total
<<foreach [item in lineItems]>><<[item.code]>> | <<[item.description]>> | <<[item.quantity]>> | $<<[item.unitPrice]:"F2">> | $<<[item.quantity * item.unitPrice]:"F2">><</foreach>>
| | | Subtotal: | $<<[lineItems.Sum(i => i.quantity * i.unitPrice)]:"F2">>
例2:従業員名簿表
テンプレート:
Name | Department | Email | Phone
<<foreach [emp in employees.OrderBy(e => e.lastName)]>><<[emp.firstName]>> <<[emp.lastName]>> | <<[emp.department]>> | <<[emp.email]>> | <<[emp.phone]>><</foreach>>
Total Employees: <<[employees.Count()]>>
例3:売上レポート表
テンプレート:
Month | Revenue | Expenses | Profit
<<foreach [month in salesData]>><<[month.name]>> | $<<[month.revenue]:"F2">> | $<<[month.expenses]:"F2">> | $<<[month.revenue - month.expenses]:"F2">><</foreach>>
Annual Total | $<<[salesData.Sum(m => m.revenue)]:"F2">> | $<<[salesData.Sum(m => m.expenses)]:"F2">> | $<<[salesData.Sum(m => m.revenue - m.expenses)]:"F2">>
条件付きテーブル行
データプロパティまたはビジネスロジックに基づいて、条件付きでテーブル行を生成します。
フィルタリングされた行
テンプレート:
Product | Stock Status
<<foreach [product in products.Where(p => p.inStock == true)]>>
<<[product.name]>> | Available
<</foreach>>
条件付き書式設定
テンプレート:
Employee | Status
<<foreach [emp in employees]>>
<<[emp.name]>> | <<if [emp.active]>>Active<<else>>Inactive<</if>>
<</foreach>>
表の書式設定に関するベストプラクティス
デザインガイドライン
- ヘッダー行 - 明確で分かりやすい列ヘッダーを作成する
- 一貫したアライメント 数値データは右揃え、テキストデータは左揃えにする。
- 適切な幅 - 想定されるコンテンツに基づいて列幅を設定します
- 書式設定 - 書式設定(枠線、網掛け)を適用する Word テンプレート
- 合計順位 集計計算は適切な集計行に配置してください。
データ準備
- クリーンなデータ テンプレート処理の前に、データが適切にフォーマットされていることを確認してください。
- null値を処理する - nullフィールドにデフォルト値を提供する
- 行数を制限する 非常に大規模なデータセットの場合は、ページネーションを検討してください。
- データを並べ替える - データを事前に並べ替えるか、テンプレートで OrderBy を使用する
複雑なテーブル構造
多段階グループ分け
テンプレート:
Category | Product | Price
<<foreach [cat in categories]>>
<<[cat.name]>> | |
<<foreach [prod in cat.products]>>
| <<[prod.name]>> | $<<[prod.price]>>
<</foreach>>
| Category Total | $<<[cat.products.Sum(p => p.price)]>>
<</foreach>>
条件付きセクションを含む表
テンプレート:
Item | Quantity | Price | Discount | Total
<<foreach [item in orderItems]>>
<<[item.name]>> | <<[item.qty]>> | $<<[item.price]>> | <<if [item.discount > 0]>><<[item.discount]>>%<<else>>-<</if>> | $<<[item.total]>>
<</foreach>>
特別なテーブル機能
貪欲なスイッチの使用
の -greedy スイッチは、テーブルセル全体にコンテンツをどのように分配するかを制御します。
-greedy なし: 各プロパティは新しい行を作成できます。 -greedy を使用する場合: コンテンツブロック全体が1行に収まります
例:
<<foreach [item in items]>>
<<[item.prop1]>>, <<[item.prop2]>>, <<[item.prop3]>>
<</foreach -greedy>>
垂直統合
複数の行にまたがるセルについては、セル結合を設定します。 Word マージフィールドを追加する前のテンプレート。
テーブル生成のトラブルシューティング
よくある問題とその解決策
問題: テーブルの行が正しく繰り返されない
解決: foreachループが行内のすべてのセルにまたがるようにしてください。
問題: 不要な余分な行
解決: 使用 -greedy 単一行コンテンツ用のスイッチ
問題: 計算間違い
解決: 式の構文とデータ型を確認する
問題: 生成後に書式が失われました
解決: テンプレートセルに書式設定を適用する(マージフィールド構文だけでなく)
問題: データが存在するのにテーブルが空になる
解決: プロパティ名がデータソースと完全に一致することを確認してください。
完全な例:売上請求書
テンプレート:
Invoice Date: <<[invoiceDate]:"MMMM dd, yyyy">>
Customer: <<[customerName]:caps>>
Item No. | Description | Qty | Unit Price | Amount
<<foreach [item in lineItems]>>
<<[item.itemNo]>> | <<[item.description]>> | <<[item.quantity]>> | $<<[item.unitPrice]:"F2">> | $<<[item.quantity * item.unitPrice]:"F2">>
<</foreach>>
| | | Subtotal: | $<<[lineItems.Sum(i => i.quantity * i.unitPrice)]:"F2">>
| | | Tax (10%): | $<<[lineItems.Sum(i => i.quantity * i.unitPrice) * 0.10]:"F2">>
| | | **Total:** | **$<<[lineItems.Sum(i => i.quantity * i.unitPrice) * 1.10]:"F2">>**
:::ヒント テーブルデザイン テーブル構造をデザインするには Wordまず、適切な書式設定、罫線、スタイルを適用します。次に、最適な結果を得るために、設計したテーブルにマージフィールドとforeachループを追加します。 :::