请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

ikens

中级会员

28

主题

191

帖子

681

积分

中级会员

积分
681

[资源分享] Excel 报表模板引擎

ikens
中级会员   /  发表于:2025-11-19 22:33  /   查看:94  /  回复:0
本帖最后由 ikens 于 2025-11-19 22:36 编辑

XTYEngine 是一个基于 .NET 6.0 的 Excel 报表模板引擎,专门用于生成复杂的 Excel 报表。该引擎采用模板驱动的方式,支持多种数据源、图片插入、分页控制,代码控制等高级功能。### 核心特性
**多区域报表模板**: 支持标题区、数据区、合计区等多种区域类型
**智能分页**: 基于页面高度的智能分页算法
**图片支持**: 支持二维码、条码、URL图片、Base64图片等多种格式
**数据关联**: 支持主数据与子数据的关联查询
**公式生成**: @合计和@总计函数自动生成Excel公式
**多数据源**: 支持JSON格式的多个数据源  
**样式保持**: 完整保持Excel模板的格式、样式、合并单元格等
**脚本支持**: 支持C#脚本代码编写改变单元格内容样式 测试地址:http://101.126.141.220:38080/DEMO

支持 Windows 和 Linux


【1.Excel 解析引擎 使用教程】
https://www.bilibili.com/video/BV1DbWzzuEfU/?share_source=copy_web&vd_source=a3f8f917c4c25632e49722d525a5a217

【2.Excel 解析引擎 脚本代码】
https://www.bilibili.com/video/BV1QbWzzuE6v/?share_source=copy_web&vd_source=a3f8f917c4c25632e49722d525a5a217


















执行日志


📋 解析模板区域(技术支持微信:only-xe)...
  ⚠️  打印区域 (PageSetup): $A$1M$50, 高度: 50 行 (799.25 points), 列宽: 13 列
     (检测到 WPS 格式,已自动适配)
     ✓ 找到命名区域: 标题区1
       范围地址: $A$1M$3
       Comment原始值: ''
       Comment是否为空: True
       Comment长度: 0
       🔄 ParseDataSourceFromComment 输入: ''
          → Comment为空,返回null
       解析出的数据源: '(null)')
  ✓ 标题区1: 行1-3 (高度:3), 数据源:
    [1] 标题区1
     ✓ 找到命名区域: 重复标题区1
       范围地址: $A$4M$4
       Comment原始值: ''
       Comment是否为空: True
       Comment长度: 0
       🔄 ParseDataSourceFromComment 输入: ''
          → Comment为空,返回null
       解析出的数据源: '(null)')
  ✓ 重复标题区1: 行4-4 (高度:1), 数据源:
    [1] 重复标题区1
     ✓ 找到命名区域: 数据区1
       范围地址: $A$5M$5
       Comment原始值: '销售明细'
       Comment是否为空: False
       Comment长度: 4
       🔄 ParseDataSourceFromComment 输入: '销售明细'
          → 直接返回Trim后的Comment: '销售明细'
       解析出的数据源: '销售明细')
  ✓ 数据区1: 行5-5 (高度:1), 数据源:销售明细
    [1] 数据区1
     ✓ 找到命名区域: 合计区1
       范围地址: $A$6M$6
       Comment原始值: ''
       Comment是否为空: True
       Comment长度: 0
       🔄 ParseDataSourceFromComment 输入: ''
          → Comment为空,返回null
       解析出的数据源: '(null)')
  ✓ 合计区1: 行6-6 (高度:1), 数据源:
    [1] 合计区1

🔍 扫描并预编译脚本 (区域数: 1)...
  🔍 扫描区域: 标题区1, 行1-3
     ✓ 找到字段: 标题区1.公司名称 在列1 (行2)
     ✓ 找到字段: 标题区1.部门 在列5 (行2)
     ✓ 找到字段: 标题区1.负责人 在列8 (行2)
     ✓ 找到字段: 标题区1.统计周期 在列1 (行3)
  ✅ 完成: 找到 4 个字段, 编码 0 个脚本, 耗时 0ms

🔍 扫描并预编译脚本 (区域数: 1)...
  🔍 扫描区域: 重复标题区1, 行4-4
  ✅ 完成: 找到 0 个字段, 编码 0 个脚本, 耗时 0ms

🔍 扫描并预编译脚本 (区域数: 1)...
  🔍 扫描区域: 数据区1, 行5-5
     ✓ 找到字段: 数据区1.区域 在列1 (行5)
     ✓ 找到字段: 数据区1.销售代表 在列2 (行5)
     ✓ 找到字段: 数据区1.客户编号 在列3 (行5)
     ✓ 找到字段: 数据区1.客户名称 在列4 (行5)
     ✓ 找到字段: 数据区1.产品类别 在列5 (行5)
     ✓ 找到字段: 数据区1.产品名称 在列6 (行5)
     ✓ 找到字段: 数据区1.单价 在列7 (行5)
     ✓ 找到字段: 数据区1.数量 在列8 (行5)
     ✓ 找到字段: 数据区1.销售额 在列9 (行5)
     ✓ 找到字段: 数据区1.成本 在列10 (行5)
     ✓ 找到字段: 数据区1.毛利 在列11 (行5)
     ✓ 找到字段: 数据区1.毛利率 在列12 (行5)
     ✓ 找到字段: 数据区1.备注 在列13 (行5)
  ✅ 完成: 找到 13 个字段, 编码 0 个脚本, 耗时 0ms

🔍 扫描并预编译脚本 (区域数: 1)...
  🔍 扫描区域: 合计区1, 行6-6
  ✅ 完成: 找到 0 个字段, 编码 0 个脚本, 耗时 0ms
📊 加载报表数据)...

🚀 开始生成报表)...
  🔄 全局状态已清空(脚本变量 + 合计/统计 + 图片)

  🔴 [DEBUG] GetAllDataItems 开始执行
    📊 数据区总数: 1
    📊 数据源总数: 2
       - JSON1: 1 条记录, 类型=List`1
       - 销售明细: 30 条记录, 类型=List`1

  🔍 处理数据区: 数据区1, DataSource='销售明细'
     ✓ 找到数据源: '销售明细'
     dataList == null? False
     dataList.Count = 30
  📦 共 30 个数据项(包含主数据和子数据)
  预计生成 1 页

  🔴 [DEBUG] GetAllDataItems 开始执行
    📊 数据区总数: 1
    📊 数据源总数: 2
       - JSON1: 1 条记录, 类型=List`1
       - 销售明细: 30 条记录, 类型=List`1

  🔍 处理数据区: 数据区1, DataSource='销售明细'
     ✓ 找到数据源: '销售明细'
     dataList == null? False
     dataList.Count = 30
  📦 共 30 个数据项(包含主数据和子数据)

  📄 生成第 1/1 页...
    ✓ 页面设置已复制: Portrait, LetterPaper
    - 渲染 标题区1...
    - 渲染 重复标题区1...
    📏 页面高度分配: 总799.2pts, 已用107.0pts, 底部固定15.8pts, 可用676.5pts
    - 本页渲染了 30 个数据项
    - 渲染 合计区1...
    📊 @合计(单价) = 169,070.00
    📊 @合计(数量) = 116.00
    📊 @合计(销售额) = 663,484.00
    📊 @合计(成本) = 424,219.72
    📊 @合计(毛利) = 239,264.28
    📊 @合计(销售额) = 663,484.00
    📊 @合计(毛利) = 239,264.28
    📏 页面高度检查: 实际=617.75pts, 目标=799.25pts, 差值=181.50pts
    ✅ 添加空白调整行: 行36, 高度=181.50pts

✅ 报表生成完成!共 1 页
⚡ 直接从 Workbook 对象转换PDF...
  打印区域:行 1-50, 列 1-13
    列宽总计:172.05 字符 → 367.49mm(系数 2.136)
    行高总计:1009.25 points → 356.67mm(系数 0.3534)
  ✅ 第一个工作表,缓存打印高度: 356.67mm
  → 最终打印区域尺寸: 367.49mm x 356.67mm
📑 开始生成 PDF: /tmp/XTYTemp_8ac773f957fe459eb1c5d18f38c760fa.pdf
👨‍💻 渲染 1 个工作表...
👤 授权用户: only-xe

🔄 进度: 1/1 页

✅ PDF 生成完成: /tmp/XTYTemp_8ac773f957fe459eb1c5d18f38c760fa.pdf
   PDF作者: XTYEngine To only-xe















本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部