{"id":21148822,"url":"https://github.com/zhangyu836/xltpl","last_synced_at":"2025-07-14T13:04:54.974Z","repository":{"id":38322135,"uuid":"201729743","full_name":"zhangyu836/xltpl","owner":"zhangyu836","description":"A python module to generate xls/x files from a xls/x template.","archived":false,"fork":false,"pushed_at":"2024-02-04T11:00:33.000Z","size":487,"stargazers_count":79,"open_issues_count":12,"forks_count":18,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-05-08T21:16:46.786Z","etag":null,"topics":["excel","jinja2","openpyxl","python","spreadsheet","spreadsheet-manipulation","template","xls","xlsx"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zhangyu836.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-08-11T06:59:22.000Z","updated_at":"2025-05-08T03:32:26.000Z","dependencies_parsed_at":"2024-06-19T03:56:17.125Z","dependency_job_id":"81563b70-794c-4712-be1b-01b1e2bb1587","html_url":"https://github.com/zhangyu836/xltpl","commit_stats":{"total_commits":46,"total_committers":2,"mean_commits":23.0,"dds":"0.30434782608695654","last_synced_commit":"74cc17a2641eb29a190b362fe9a86c8da37ae2bc"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhangyu836%2Fxltpl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhangyu836%2Fxltpl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhangyu836%2Fxltpl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhangyu836%2Fxltpl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zhangyu836","download_url":"https://codeload.github.com/zhangyu836/xltpl/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253149621,"owners_count":21861740,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["excel","jinja2","openpyxl","python","spreadsheet","spreadsheet-manipulation","template","xls","xlsx"],"created_at":"2024-11-20T09:29:14.961Z","updated_at":"2025-05-08T21:16:51.619Z","avatar_url":"https://github.com/zhangyu836.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\r\n# xltpl  \r\n使用 xls/x 文件作为模板来生成 xls/x 文件。 [English](README_EN.md)     \r\n\r\n## 实现方法\r\n\r\nxls/x 文件的每个工作表会被转换为一棵树。  \r\n树会被转换为带有自定义 tag 的 jinja2 模板。  \r\n渲染模板时，自定义 tag 所对应的 jinja2 扩展调用相应的树节点来写入 xls/x 文件。  \r\n\r\n \r\n## 安装\r\n\r\n```shell\r\npip install xltpl\r\n```\r\n\r\n## 使用\r\n\r\n*   要使用 xltpl，需要了解 [jinja2 模板的语法](http://docs.jinkan.org/docs/jinja2/templates.html) 。  \r\n*   选择一个 xls/x 文件作为模板。  \r\n*   在单元格中插入变量： \r\n```jinja2\r\n{{name}}\r\n```  \r\n*   ~~在单元格的批注中插入控制语句（使用 beforerow、beforecell 和 aftercell 指定其位置）：~~  \r\n\r\n\r\n```jinja2\r\nbeforerow{% for item in items %}\r\n```\r\n```jinja2\r\nbeforerow{% endfor %}\r\n```\r\n\r\n*   或在单元格中插入控制语句(**v0.9**)：\r\n\r\n```jinja2\r\n{%- for row in rows %}\r\n{% set outer_loop = loop %}{% for row in rows %}\r\nCell\r\n{{outer_loop.index}}{{loop.index}}\r\n{%+ endfor%}{%+ endfor%}\r\n```\r\n\r\n\r\n*   运行代码\r\n```python\r\nfrom xltpl.writerx import BookWriter\r\nwriter = BookWriter('tpl.xlsx')\r\nperson_info = {'name': u'Hello Wizard'}\r\nitems = ['1', '1', '1', '1', '1', '1', '1', '1', ]\r\nperson_info['items'] = items\r\npayloads = [person_info]\r\nwriter.render_book(payloads)\r\nwriter.save('result.xlsx')\r\n```\r\n\r\n## 支持的特性\r\n* 合并单元格 (MergedCell)   \r\n* 单元格非字符串值 (使用 **{% xv variable %}** 来表示变量)   \r\n* 对于 xlsx     \r\n图片 (使用 **{% img variable %}**)     \r\n数据有效性(DataValidation)     \r\n筛选 (AutoFilter)   \r\n\r\n\r\n## 相关\r\n* [pydocxtpl](https://github.com/zhangyu836/pydocxtpl)  \r\n使用 docx 文件作为模板来生成 docx 文件。  \r\n其实现方法与 xltpl 类似。\r\n* [django-excel-export](https://github.com/zhangyu836/django-excel-export)  \r\n利用 xltpl 和 pydocxtpl 在 Django admin 后台以xls/x 和 docx 格式导出数据。  \r\n[演示项目](https://github.com/zhangyu836/django-excel-export-demo)  \r\n[在线演示](https://tranquil-tundra-83829.herokuapp.com/) (用户名: admin\r\n密码: admin)   \r\n* [nodejs 版本的 xltpl](https://github.com/zhangyu836/node-xlsx-template)   \r\nCodeSandbox examples: \r\n[browser](https://codesandbox.io/s/xlsx-export-with-exceljs-and-xltpl-58j9g6)\r\n[node](https://codesandbox.io/s/exceljs-template-with-xltpl-4w58xo)   \r\n* [xltpl for java](https://github.com/zhangyu836/xltpl4java)\r\n\r\n\r\n## 说明\r\n\r\n### xlrd\r\n\r\nxlrd 不会读入打印设置。  \r\n如果需要一致的打印设置，可以使用[这里的 xlrd](https://github.com/zhangyu836/xlrd) 。 \r\n\r\n### xlwt\r\n  \r\nxlwt 总是将默认字体设置为 'Arial'。  \r\nExcel 基于默认字体来设置单元格宽度。   \r\n如果需要一致的单元格宽度，可以使用[这里的 xlwt](https://github.com/zhangyu836/xlwt) 。  \r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhangyu836%2Fxltpl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzhangyu836%2Fxltpl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhangyu836%2Fxltpl/lists"}