关于 Excel 转文本工具
Excel 转文本工具基于 SheetJS 库在浏览器本地将 xlsx、xls 电子表格提取为纯文本格式。输出采用制表符(Tab)或自定义分隔符分隔列,换行符分隔行,生成可被任意文本编辑器打开的平面文本。支持多工作表批量处理,每个工作表可独立导出。纯文本几乎放弃了所有视觉样式,换来的是极强的通用性和可处理性:适合导入不支持 Excel 的老旧系统、走命令行管道用 grep 或 awk 搜索、以及纳入版本控制做 diff 对比——这正是它和 PDF、图片导出的本质区别。SheetJS 解析器会正确识别日期、数字、百分比等单元格格式并转为文本表示,例如把 Excel 的日期序列号转成 ISO 8601 字符串。转换前先确认日期与百分比格式是否符合预期,避免导出后数字含义失真;含敏感数据的表格在浏览器本地处理完即销毁,不会上传。放进版本库后每次改动都能清楚看到单元格级别的变化,比二进制表格更适合做差异对比。
对齐效果完全取决于字体是否等宽,这是最需要提前确认的前提。等宽字体下每个拉丁字符占一格,按字符数补齐就能对齐;而中文字符通常占两格,混排时按字符数补齐必然错位。正确做法是按显示宽度计算填充数,并且明确说明输出在什么字体下查看才有对齐效果,否则接收方换个字体打开就全乱了。
单元格内的换行与制表符是另一个破坏对齐的常见来源。表格里为了排版常手动插入换行,导出为文本后这些换行会被当作真实换行,使一行数据变成两行,列对齐随之崩溃。处理前应决定这类字符是保留、替换为空格还是转义表示,并把决定写进导出说明,让下游知道该按什么规则还原。
与导出为表格格式相比,纯文本的优势是「无依赖、可直接粘贴」:不需要接收方有表格软件,也不受软件版本影响。代价是丢失类型信息与格式,数字与前导零都会变成纯字符串。因此它适合用于日志对照、代码内联与快速核对,不适合作为需要保留类型与公式的交付格式,两者的选择标准是「下游是否需要继续计算」。
列宽与总宽度需要与用途匹配。面向终端查看时总宽不宜超过常见终端列数,否则会折行并打乱对齐;面向文档粘贴时则要控制单行长度,过长的行在部分编辑器中会被自动换行。经验做法是先按内容最长的列设定宽度上限,超长内容截断并标注,而不是让它把整行撑开。
最后,交付前建议在一台「干净」的编辑器里打开确认一次。不同编辑器对制表符宽度、行尾空白与最后一行换行的处理并不一致,在自己惯用的环境里看着正常,换个环境可能就错位。把「在目标环境中核对」作为导出流程的最后一步,能避免大量「我这边是好的」这类来回沟通。
还有一个前提容易被忽略:文本导出通常是单向的,把文本再导回表格需要重新解析分隔符与对齐关系,而这两项在导出后已经退化。因此导出前应确认这是终点格式而不是中间格式;若下游还要处理,导出为表格格式更合适,纯文本应留给「人读」而不是「机器再读」的场景。
实现原理
文本导出用对齐与控制字符模拟表格排版。要点是「等宽」这一前提:只有等宽字体下按字符数补齐空格才能对齐,中文字符通常占两列而英文字符占一列,因此混排时按字符数补齐会错位,需按显示宽度计算。此外原表的换行与制表符会破坏对齐。
「名 称」与「ab」两列对齐按字符数补齐会把中文列错位——中文一字两列,应按显示宽度(东亚宽度)计算填充本页实测数据
| 逐格一致 | 首个工作表输出与写入数据完全相同:中文、空单元格留空、3 与 3.5 按原值、字符串 007 不变成 7 |
|---|---|
| 工作表切换 | 切到 Second 输出 only/1、切到 Empty 输出空——切换后确实重新转换 |
| 特殊字符 | 单元格含制表符/换行/引号时按 CSV 规则加引号:"带<TAB>制表符"、"带<LF>换行"、"带""引号" |
| 分隔符 | 列之间用制表符(TSV),行之间用换行,可直接粘进 Excel/Sheets |
| 空表 | 空工作表输出空字符串,不报错 |
输出是 TSV 不是纯文本,所以单元格里的制表符与换行必须加引号,否则粘回表格时会错列——实测确实加了("带\t制表符")。这与 RFC 4180 的 CSV 规则一致,只是分隔符换成了制表符。一个实务建议:Excel 里含换行的单元格粘成 TSV 后,多数工具仍能正确解析,但用 split('\t') 自己解析的人会踩坑——按引号解析才安全。
使用方法
- 打开「Excel 转文本工具」
- 导入或粘贴待处理的数据
- 根据需要调整输出选项
- 点击「处理」按钮,结果实时显示
- 复制或导出结果
使用场景
- 命令行处理 — 将 Excel 数据转为制表符分隔文本,通过 grep、awk、sed 等命令行工具进行搜索和处理。
- 老旧系统导入 — 把 Excel 数据转为纯文本格式导入不支持 Excel 的老旧业务系统或 AS400 终端。
- 版本控制对比 — 将 Excel 配置数据转为文本格式后纳入 Git 管理,利用 diff 追踪每次数据变更。
- 数据快速预览 — 将 Excel 内容提取为纯文本快速浏览,无需安装 Office 软件即可查看数据。
- 日志格式转换 — 将 Excel 维护的错误码表转为文本格式,嵌入日志分析脚本作为查询参考。
- 数据导入前检查 — 把待入库的 Excel 导出为纯文本,在行文环境下快速核对列数是否对齐。
常见问题
输出用什么分隔符?
默认使用制表符(Tab)分隔列,也可自定义为逗号、分号、竖线等任意分隔符,换行符分隔行。
日期格式怎么显示?
SheetJS 会将 Excel 日期序列号转换为 ISO 8601 格式的文本字符串(如 2024-01-15),保持可读性。
能处理多个工作表吗?
能。工具支持选择指定工作表导出,也可逐个处理全部工作表,每个表输出为独立的文本块。
纯文本会丢失什么信息?
纯文本格式不保留单元格样式、公式、图表和合并单元格信息,仅保留数据值和行列结构,这是换取通用性的代价。
很大的工作簿会卡吗?
解析在浏览器本地进行,普通几十万单元格都很流畅;超大工作簿建议按工作表分次导出,并留意浏览器内存占用。
文件会被上传吗?
不会。所有解析在浏览器本地通过 SheetJS 完成,文件不离开你的设备,处理完即销毁,可安全处理含敏感信息的表格。
导出的文本里数字丢了前导零(如编号 001)?
这是 Excel 的单元格格式问题,不是转换问题:Excel 把 001 存成数字 1。转换按存储值输出。要保留前导零,在 Excel 里把该列设为文本格式后再导出,或用撇号前缀输入。
换行符在导出的文本里变成了奇怪符号?
单元格内按 Alt+Enter 输入的换行会被导出为真实换行符,粘贴到不支持多行的编辑器就显示异常。需要单行输出时把换行替换为空格或自定义分隔符;保留换行则用支持多行的目标(如 Markdown 编辑器)。