Skip to content

Zerounary/excel-printer-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

excel-printer-rs

excel-printer-rs 是基于 rust_xlsxwriter 的 Rust 版本 Excel 打印模板生成器,可复用 config.json 描述的多 sheet 布局,并输出打印友好的 .xlsx

特性

  • ✅ 兼容 JS 版 config.json(模板/变量/多表结构一致)
  • ✅ CLI:单个 config 或目录批量生成,支持文件名模板
  • ✅ 库调用:直接返回 Workbook 以便自定义写出逻辑
  • ✅ 内置布局能力:列宽、纸张、页边距、fit to page、边框补齐等

目录结构

src/
├── main.rs        # CLI 入口(clap)
├── generate.rs    # 核心入口:config -> workbook / 文件
├── config.rs      # JSON 归一化(模板/实例/变量合并)
├── layout.rs      # 列宽、纸张、分页等
├── renderers.rs   # title / text / form / table / space-row 渲染
├── styles.rs      # 样式合并、Excel 样式映射
├── template.rs    # 变量替换与占位符解析
└── utils.rs       # 通用工具

构建与运行

cargo build          # 编译 CLI
cargo run -- --help  # 查看命令行参数

CLI 示例

# 默认:读取 config.json,输出 output.xlsx
cargo run -- --config config.json --out output.xlsx

# 批量模式:遍历 configs/ 下所有 .json
cargo run -- --config-dir configs --out-dir out
  • 提供 --config-dir 时会忽略 --config/--out
  • 批量模式下,JSON 文件名会被当作模板(支持 {{today}} / {{file.*}} 以及 config 中的变量),自动生成合法 .xlsx 文件名

作为库使用

use excel_printer_rs::generate::generate_workbook_from_config;
use serde_json::Value;

fn main() -> anyhow::Result<()> {
    let config: Value = serde_json::from_str(include_str!("../config.json"))?;
    let mut workbook = generate_workbook_from_config(&config)?;
    workbook.save("output.xlsx")?;
    Ok(())
}

也可直接调用:

  • generate_xlsx_file_from_config_file(config_path, out_path)
  • generate_xlsx_files_from_config_dir(config_dir, out_dir)

config 结构摘要

与 JS 版本完全一致,推荐模板 + 实例写法:

{
  "style": {},
  "variables": {
    "shared": {},
    "sheets": [
      {
        "template": "delivery",
        "name": "2026-01-05 送货单",
        "variables": {}
      }
    ]
  },
  "sheetsTemplates": [
    {
      "id": "delivery",
      "name": "送货单模板",
      "paper": "A4",
      "maxColumns": 6,
      "rows": []
    }
  ]
}
  • variables / vars:任意结构,渲染时可通过 {{path.to.value}}{"$var":"path"} 替换
  • sheetsTemplates[]:模板定义,仍支持旧 sheets[] / 单 sheet 兼容
  • variables.sheets[]:实例列表,指定 templatenamevariables,并可覆盖模板字段

rows 支持的 block

type 描述
title 整行合并标题,自动套用样式
text 段落文本,支持换行/样式
form label/value 式表单,每行 2 列,可配置字段样式
table 表格,支持列宽、列/行/单元格样式、合并、cellStyles 精细控制
space-row 空白行,控制间距且不会补齐边框

开发提示

  • 配置样例:excel-printer-rs/config.json
  • 回归测试:cargo test(若后续添加)
  • 输出示例:excel-printer-rs/test.xlsx

欢迎根据业务需要扩展新的 block 或模板字段,Rust 版本会持续追赶 JS 版能力。

About

rust 版的 excel 模板打印程序

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages