给领导或客户看数据时,Excel 发过去对方电脑上不一定装 Office,手机上更是打不开;用第三方图表库做出来的页面,一旦对方断网或者资源加载失败,整页就是空白。
本项目把 xlsx 一键转成单文件 HTML 报表:双击就能开、手机也能看、发给谁都不会掉样式。关键在于生成的 HTML 不引用任何外部资源,连图表都是用 SVG 手画的——所以一个文件就是全部内容,离线可用。
给领导或客户看数据时,Excel 发过去对方电脑上不一定装 Office,手机上更是打不开;用第三方图表库做出来的页面,一旦对方断网或者资源加载失败,整页就是空白。
本项目把 xlsx 一键转成单文件 HTML 报表:双击就能开、手机也能看、发给谁都不会掉样式。关键在于生成的 HTML 不引用任何外部资源,连图表都是用 SVG 手画的——所以一个文件就是全部内容,离线可用。
1. 生成的报表包含:顶部统计卡(行数 + 每个数值列的合计/平均)、图表区、明细表、自动合计行。
2. 列类型自动判断:某列过半是数字即认定为数值列,容忍少量脏格子,不需要人工指定。
3. 颜色映射 heat():把数值线性映射成背景色深浅,高低一眼可见。
4. svg_bar() 手写 SVG 横向条形图:自己算坐标拼字符串,不引 matplotlib / ECharts,HTML 才能做到零依赖。
5. 自带深色模式(跟随系统 prefers-color-scheme)、表头吸顶、横向滚动。
6. 读值用 data_only=True 取公式算出的值;所有单元格值过 html.escape,数据里带 < 或 & 不会破坏页面。
实测结果:11 行 × 5 列的数据 → 生成 6 KB 单文件 HTML,含图表与合计行,浏览器直接打开。
被追问时的答案:为什么不用 ECharts —— 外部依赖会导致离线打不开;怎么判断列类型 —— 统计非数字占比,超过一半即认定为数值列。