跳到主要内容

模板中的表格 - 动态表格指南

表格是专业文档的基本组成部分,它以结构化的方式呈现数据,便于比较、参考和分析。 PDF4me的文档生成引擎能够高效地创建动态表格,这些表格填充来自您的数据源的数据。


多列表格结构

通过在表格单元格中定义合并字段来生成多列表格。每一行都会根据数据收集情况重复出现。

基本表语法

在您的系统中创建表结构 Word 模板采用以下模式:

Column 1: <<foreach [product in products]>><<[product.productName]>>
Column 2: <<[product.manufactured]:"yyyy.MM.dd">>
Column 3: <<[product.price]>><</foreach>>

模板结构:

  1. 在表格中 Word 具有所需列数
  2. 在第一个单元格中放置 foreach 循环
  3. 在同一行的后续单元格中添加合并字段
  4. 在最后一个单元格中关闭 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>>

表格格式最佳实践

设计指南

  1. 标题行 - 创建清晰、描述性的列标题
  2. 一致性对齐 数字数据右对齐,文本数据左对齐
  3. 合适的宽度 - 根据预期内容设置列宽
  4. 格式化 - 在文本中应用格式(边框、底纹) Word 模板
  5. 总排名 - 将汇总计算结果放在相应的汇总行中

数据准备

  1. 干净数据 - 在进行模板处理之前,请确保数据格式正确。
  2. 处理空值 - 为空字段提供默认值
  3. 限制行数 对于非常大的数据集,请考虑分页。
  4. 排序数据 - 预先对数据进行排序,或在模板中使用 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 循环。

:::