跳到正文

数据类型不出错的表格工具

九款工具,让表格在Excel、CSV、JSON、XML、PDF和OpenDocument之间转换。其中三款需要完整的电子表格软件,会把文件发送到我们的服务器,下载一就绪,文件即被删除。

9个工具,无需注册,无水印

如果某个系统要求CSV,请用Excel转CSV;如果CSV在Excel里挤成了一整列乱码,请用CSV转Excel;如果数据要交给代码处理,请用CSV转JSON或JSON转CSV。旧版.xls文件和OpenDocument工作簿交给XLS转XLSX、ODS转XLSX和XLSX转ODS,格式和图表都会保留;PDF转Excel则能从一份没人给您源文件的报告里把表格取回来。下面的说明讲的是几乎所有表格转换问题背后的那件事:单元格存储的内容与它显示给您的内容之间的区别。

Excel与CSV

2个工具

在工作簿、CSV文件和PDF之间转换数据。

单元格里到底存了什么

一个电子表格单元格里存着两样东西:一个值和一个数字格式。值0.15可以显示为15%、0.15、£0.15或15.00%,而这些显示方式丝毫不会改变值本身。这是关于电子表格最有用的一条知识,也正因如此,Excel转CSV会让您在“与Excel中显示的一致”和“原始数字,ISO日期”之间做选择,而不是替您猜。前者写出的正是屏幕上的文字——15/03/2024、1,234.50、12%——这与Excel自带的“另存为”一致,也是人阅读CSV时所期望的。后者写出纯数字和ISO日期,这才是数据库或脚本所期望的。选错了,导入就会失败,而且看上去像是数据损坏了。

日期其实是伪装成日期的数字。日期单元格存的是一个按天计的序列号,从哪一天开始计取决于文件:Windows版Excel写出的工作簿从1900年算起,旧版Mac Excel写出的工作簿从1904年算起,两者相差1462天。1900日期系统还更古怪——它认为1900年2月29日真实存在,这个错误继承自Lotus 1-2-3,为了兼容一直保留至今。这里的工具会读取每个工作簿自己的纪元标记,并把这个虚构的闰日精确还原在它应在的位置,所以在这里转换的日期与Excel显示的一致,而不会偏移四年零一天。

公式和它的结果是并排存储的。工作簿同时保存公式文本和上一次计算出的值。工作簿之间的转换——ODS转XLSX、XLS转XLSX、XLSX转ODS——会把公式本身带过去,并在两套函数体系之间转换,所以您编辑时表格仍会重新计算;只在一方存在的少数函数会显示为#NAME?,直到您替换掉它们。凡是离开电子表格世界的格式——CSV、JSON、XML——都只携带计算结果,因为这些格式根本没有公式的概念。

CSV无法表达工作簿的大部分内容,假装它能,正是数据丢失的根源。CSV没有工作表,所以每个工作表会成为单独的文件(需要全部时可打包成ZIP)。它没有单元格类型,所以每个字段都是文本,直到有程序去猜。它没有格式、没有公式、没有图表、没有图片、没有颜色、没有列宽。合并单元格必须二选一处理——只把值放在第一个单元格,或者在合并区域内重复。它也不记录自己的分隔符、小数点符号和编码,所以一个用分号分隔、以逗号作小数点的欧洲文件,在美国版Excel里会挤成一列;除非文件以字节顺序标记(BOM)开头,否则带重音的文字会变成乱码。

看起来像数字的文本,才是真正造成损失的地方。打开CSV时,Excel会逐个单元格地猜:邮编01234丢掉开头的零,16位订单号变成1.23457E+15且无法恢复,基因名SEPT2被识别成日期——这个问题严重到遗传学界干脆给这些基因改了名。CSV转Excel则按列判断,依据该列的全部值,只有整列一致时才转换;凡是带前导零的,以及长到JavaScript数字无法精确表示的整数,都保留为文本。JSON转CSV在反方向上同样谨慎,64位ID逐位照抄,而大多数转换器会把它们四舍五入。

JSON和XML也各有丢失的东西。JSON根本没有日期类型,所以日期以文本形式传递,接收方的代码必须知道自己面对的是什么。数据型XML只携带值,没有格式、图表或图片——这正是导入数据源需要的,但如果您的目的是完整保留工作簿,就不合适了。

浏览器确实不适合的场景

其中七款工具从不把您的文件发送到任何地方:Excel转CSV、CSV转Excel、CSV转JSON、JSON转CSV、XML转Excel、Excel转XML和PDF转Excel。不存储任何文件——当文件是工资表或客户名单时,这一点很重要。另外四款不同——Excel转PDF、ODS转XLSX、XLS转XLSX和XLSX转ODS会把文件交给我们的服务器,因为排版打印页面,或者在格式之间保留字体、颜色、条件格式和图表,都不是网页能模拟出来的。这些文件通过加密连接传输,转换完成,下载一就绪即被删除。服务器无法连接时,每款工具都会改用自己的转换器,保留值、公式、数字格式、合并单元格和列宽,但不保留字体、颜色和图表,并会告诉您它这样做了。

大小。浏览器端工具把整张表放在内存里,所以上限取决于标签页的内存预算——几十MB轻松应对,超过一百MB就吃力,几GB的导出文件则毫无希望。工作簿转换器每个文件上限50 MB,Excel转PDF上限40 MB,而且都会在转换前就告诉您,而不是转换后才说。Excel工作表本身最多1,048,576行,这是格式的限制,不是我们的;CSV转Excel会把超出的数据续写到新的工作表并重复表头,而不会悄悄截断您的数据。

真正的数据处理。转换器不是数据库。连接两张表、去重、汇总、筛选一千万行、分析一份杂乱的导出文件,这些工作应交给专门的工具,而且免费的就很好用:csvkit适合在命令行里快速处理CSV,Miller能同时处理JSON和CSV,qsv处理超大文件速度快,DuckDB可以直接对CSV或Parquet文件运行真正的SQL,如果您已经在用Python,就用pandas。

宏以及任何会运行的内容。VBA无法带入.xlsx,因为这种格式根本没有存放它的地方;也不会带入.ods,因为LibreOffice只能运行部分VBA,差异会表现为错误的数字而不是报错。如果工作簿依赖宏,请把原文件和转换后的副本一起保留。有密码保护的文件,必须先在设置密码的程序里移除密码。

自动化。这些工具在有人点击时才运行。每晚定时转换数据源是命令行的活:无界面模式的LibreOffice能处理本页的所有格式。

名字相近的工具怎么选

Excel转CSV与Excel转XML。两者都读取工作簿、写出扁平的数据文件,区别在于目的地。CSV用于电子表格、数据库以及任何写着“上传CSV”的地方。XML用于规定了元素名称的导入和集成——您设置根元素名和行元素名,表头成为元素名,值以纯数字和ISO日期输出。Excel转XML还能写出XML Spreadsheet 2003,那是完全不同的东西:一种Excel会作为工作簿重新打开的格式,适用于系统要求“Excel XML”而不是您自己的数据XML的情况。

CSV转Excel与CSV转JSON。解析器相同,按列识别类型的方式相同,输出不同。CSV转Excel生成.xlsx,日期和数字都是真实格式,可以求和排序,表头行已冻结并可筛选——这是给人用的。CSV转JSON生成对象数组、数组的数组、键值对象或JSON Lines——这是给代码用的。如果两样都要,就为人转Excel、为流程转JSON;两者结果会一致,因为列类型是按同样的方式判定的。

XML转Excel与Excel转XML。并不只是方向相反。XML转Excel得先找到表格:它寻找在同一父元素下重复出现的元素——目录里的每个<book>、RSS源里的每个<item>——为每组打分,其余候选一键即可切换,然后把属性和嵌套元素展平成以路径命名的列。Excel转XML无需寻找,因为您的每一行本来就是一条记录。

XLS转XLSX与CSV转Excel。两者最终都得到一个现代工作簿。XLS转XLSX升级真正的Excel 97–2003二进制文件,并保留其中的一切——工作表、公式、格式、图表。CSV转Excel则从本来就没有这些内容的纯文本构建工作簿。两者重叠的是一个恼人的中间情况:很多网页应用导出的其实是HTML表格或XML文件,却命名为.xls。XLS转XLSX能识别它们的真实身份,并保存为真正的工作簿。

PDF转Excel与Excel转PDF。方向相反,而且只有一个方向是可靠的。Excel转PDF是排版工作:工作簿本来就知道自己的打印区域、分页符和格式,转换器照着画出来即可。PDF转Excel是困难的方向,因为PDF只记录每个字符画在哪里,完全不记录它属于哪个单元格——列是根据位置推断出来的。对于整齐、有框线的表格效果很好;遇到合并单元格或多行换行的单元格则需要整理;它还原的是值,而不是格式或公式;PDF的每一页各成一个工作表。如果原始工作簿还在,请直接要原文件。

处理.ods文件:ODS转XLSX还是Excel转CSV。Excel转CSV可以直接打开.ods并给您其中的值。ODS转XLSX则让工作簿保持为工作簿,公式、格式和图表都在。需要有人在文件里继续工作时,用转换器;需要系统从中取出数字时,走CSV这条路。

这些工具的技术基础

真正完成处理工作的开源引擎,以及它们所实现的技术规范。

  • SheetJSApache-2.0 — 读写这里的所有工作簿格式.
  • LibreOffice CalcMPL-2.0 — 处理浏览器无法完成的转换(服务可用时).
  • RFC 4180Specification — 是CSV最接近标准的规范,也解释了为什么各个文件互不一致.

常见问题

我的表格会被存储在什么地方吗?

Excel转CSV、CSV转Excel、CSV转JSON、JSON转CSV、XML转Excel、Excel转XML和PDF转Excel不会——它们在当前标签页内读取您的文件并写出结果,不会发送到任何地方。Excel转PDF和三款工作簿转换器确实会通过加密连接把文件发送到我们的服务器,因为排版页面或跨格式保留格式与图表需要真正的电子表格软件;文件转换后立即删除,不存储、不记录、不共享任何内容。

为什么直接双击打开,Excel就把我的CSV弄乱了?

因为Excel会独立地猜测每个单元格,而且从不询问。前导零消失,长ID变成科学计数法,日期在“日在前”和“月在前”之间颠倒,用分号分隔的文件挤成一列。CSV转Excel按列依据全部值做一次判断,并在您下载前展示每一项判断,让您可以当场纠正,而不是事后才发现。

为什么本该是重音字母的地方出现了奇怪的字符?

CSV不记录自己的编码,所以除非文件以字节顺序标记(BOM)开头,否则Excel会退回使用您电脑上旧的区域代码页。在Excel转CSV里选择“UTF-8(带BOM,适用于Excel)”,重音字母、西里尔字母、阿拉伯文、中文和表情符号都能正确打开。不带BOM的纯UTF-8则适合数据库和代码,它们不需要这个标记。

我的公式会怎样?

工作簿之间转换时,公式会作为公式带过去并继续计算;只在一方存在的函数会显示#NAME?,直到您替换它。导出为CSV、JSON或XML时,只写出计算结果,因为这些格式没有存放公式的地方。反方向转回来时,以=开头的单元格会写成文本,绝不会成为可运行的公式,所以恶意CSV在打开工作簿时无法执行任何内容。

有文件大小或每日次数限制吗?

无需账户,没有配额,也没有每日上限。浏览器端工具受设备内存限制;工作簿转换器接受最大50 MB的文件,Excel转PDF最大40 MB,文件超出时都会明确告诉您。

会有水印或行数限制吗?

不会。这里没有任何东西会限制行数、在工作表上盖试用印记或截断您的数据。唯一的行数限制是Excel自身的1,048,576行,更长的文件会续写到新的工作表,而不是被截掉。网站靠页面上的广告保持免费。