模板中的表格 - 动态表格指南
表格是专业文档的基本组成部分,它以结构化的方式呈现数据,便于比较、参考和分析。 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 |
| 全部的 | 195000美元 |
其他聚合函数
平均的:
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)]>>
单列表格
生成单列表格,每行包含多行信息。使用 -greedy 切换以确保每个收藏项占据一行。
单列模板语法
<<foreach [product in products]>>Product: <<[product.productName]>>, Manufactured On: <<[product.manufactured]:"yyyy.MM.dd">>, Product Price: $<<[product.price]>><</foreach -greedy>>
要点: 这 -greedy switch 语句将整个内容块视为一行,防止出现不必要的换行。
生成的输出:
| 产品详情 |
|---|
| 产品:笔记本电脑,生产日期:2022年7月25日,产品价格:160000美元 |
| 产品:键盘,生产日期:2022年4月12日,产品价格:10000美元 |
| 产品:扬声器,生产日期:2022年5月8日,产品价格:25000美元 |
高级表格示例
示例 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 模板
- 总排名 - 将汇总计算结果放在相应的汇总行中
数据准备
- 干净数据 - 在进行模板处理之前,请确保数据格式正确。
- 处理空值 - 为空字段提供默认值
- 限制行数 对于非常大的数据集,请考虑分页。
- 排序数据 - 预先对数据进行排序,或在模板中使用 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 开关控制内容在表格单元格中的分布方式:
不贪婪: 每个属性都可能创建一个新行 使用 -greydy: 整个内容块保持在一行内。
例子:
<<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 循环。
:::