安装好 Excel 导出模块后,我们需要在 Excel 导出模版里新建一个模版
一、模版变量处理
![]()
1. 当前单据变量
- 变量名称:doc
- 变量表示格式:使用双花括号{{}}表示变量。
示例:
- 普通字段引用
使用{{doc.字段名}}引用普通字段(非明细表)。
示例:{{doc.customer}} 表示当前单据的客户字段。 - 支持 Jinja 表达式变量
通过返回文本的 Python 脚本实现复杂功能。
用途 | 函数 | 示例 |
显示链接的关联字段 (Excel VLOOKUP) | frappe.db.get_value | {{frappe.db.get_value("Address", doc.shipping_address, "country")}} 根据地址编号返回国家 |
翻译字段值 | (表达式) | {{(row.item_name)}} 翻译明细行物料名称 |
金额大写 | doc.money_in_words | {{doc.money_in_words(doc.total)}} |
单据制单人 | doc.get_owner_username | {{doc.get_owner_username()}} |
单据审批人 | doc.get_submit_username | {{doc.get_submit_username()}} |
明细表字段汇总 | frappe.db.get_value | {{frappe.db.get_value('Delivery Note Item', {'parent': doc.name}, 'sum(total_weight)')}} |
注意:
- 文本与变量混合:支持在同一单元中混合文本与变量。
示例:客户名称: {{doc.customer_name}} - 多个变量:一个文本串中可包含多个变量。
2. 明细表(子表)处理
- 明细行定义
定义模版时,在输出明细行内容的第1列(A列)在审阅里填写批注:row=doc.items。
- row= 为固定内容,用于绑定子表字段。
- doc.items 表示该明细行对应的子表字段名。
- 明细行变量
- 当前明细行对象变量为 row。
示例:{{row.item_code}} 表示明细行的编号字段。
- 当前明细行对象变量为 row。
- 动态行生成
- 模板定义时,明细行内容仅保留一行。
- 根据实际明细行数量,代码会自动新增行并向下移动模板中的内容。
3. 特殊处理
- 引用不存在的字段
- 输出结果为原变量字符串。
- 错误信息记录在系统日志中。
- 空值字段
- 输出为空字符串。
- 地址信息
- 地址内容可能包含换行符,需将单元格格式设置为“自动换行”。
- 可同时合并上下单元格以显示完整地址。
- 图片字段
- 图片字段变量示例:{{row.image}}
- 支持 .png, .jpg, .img 格式图片,自动加载到对应单元格。
- 注意:图片尺寸需合理。
二、维护单据类型Excel导出模板
1. 模板配置项
- 单据类型
- 模板名称:上传的 Excel 模板文件名称。
- 多语言支持
- 如果勾选,导出时用户需选择语言。
- 模板中调用 _() 函数翻译标签。
示例:{{_('Item Code')}}
- 导出文件名
- 使用 Python 表达式生成文件名,默认格式为:
{{template_name}}{{doc.name}}.{{path[-4:]}}
示例:模板名_单据名.文件扩展名
可使用以下变量: - doc
- template_name
- path(包含文件扩展名的文件路径)
- 使用 Python 表达式生成文件名,默认格式为:
FrappeExcel导出模版使用说明