跳到正文

将CSV转换为Excel

把CSV文件转成规范的XLSX工作簿:数字和日期可以直接求和、排序,邮编和长ID完全保持原样,标题行加粗、冻结并带筛选功能。

  • 绝不存储
  • 无需排队,无需等待
  • 无需注册,无水印

使用方法

1

添加CSV文件

拖放一个或多个.csv、.tsv或.txt文件,或者直接粘贴数据。多个文件会成为同一工作簿中的多个工作表。

2

检查预览

分隔符和编码会自动检测,每一列都会显示它将被设为的类型。您可以随意修改。

3

下载

一个.xlsx工作簿,可在Excel、Google表格、Numbers和LibreOffice中打开。

一列的类型是怎么确定的

每一列作为一个整体来检查,并被赋予一种类型,有几种特定形式会强制整列保持为文本,不管该列其余内容是什么样子。任何一个值带有前导零且不止一位数字,就会触发。任何超过15位有效数字的数字也会触发,因为超过这个位数,数字就会丢失而不仅仅是显示方式不同。以加号开头、后面跟着7位或更多数字的内容也会触发,因为那是电话号码,而不是数量。同一列中混用两种货币符号、混用不同的小数点符号,或者出现早于1900年的日期(Excel自己的日历无法容纳),也都会触发。每一个这样的决定都会在预览中注明原因,让您看清某一列为什么保持为文本,而不用去猜。

日期按列而不是按单元格判断。大于12的值能确定文件是日在前还是月在前;如果都不大于12,就由其他日期列表决,再依次参考您自己的设置,最后默认日在前。混用两种顺序的列会被拒绝转换,保持为文本,而不是去猜测,因为这种情况下猜错了是看不出来的。两位数年份遵循Excel自己的规则,小于30的都算作本世纪。只有字面上的true和false会变成真正的布尔值——yes和no、Y和N、1和0都原样保留,因为它们在某些文件里各有别的含义。

不符合所在列类型的值会以原始文本写回,而不是被清空;通常表示“缺失”的标记——NA、N/A、null、nil、none、单独的短横线或问号,以及Excel自己的错误文本——出现在有类型的列中时,不会破坏该列的类型。每个文本单元格都通过单元格类型写为文本,而不是靠开头加撇号,所以以等号开头的字段在工作簿中是真正无效的,而不只是被伪装了。如果其中有任何处理不适合您的文件,下载前可以在预览中把单独的列固定为文本。

如果您需要的是别的

这一流程在页面上运行——它会频繁让出主线程,保持标签页可以响应,并且没有文件大小上限,这意味着一个真正很大的CSV会先让您的风扇响起来,然后才会报错。对于数百MB的文件,或者每晚都要执行的转换,csvkit的in2csv和无界面模式的LibreOffice 都能通过脚本完成,而且都不需要浏览器把整张表放在内存里。

更难回答的问题是,.xlsx是否是合适的目的地。工作簿是供人阅读和编辑数据的地方,如果文件只会被代码读取,花在让类型正确显示上的每一个小时都是白费——这种情况下请保留CSV,或者一次性转换成Parquet或JSON Lines,让使用方声明数据结构,而不是从值中推断。类型推断是一种谨慎做出的猜测;数据结构则根本不是猜测。

常见问题

为什么不直接用Excel打开CSV?

Excel会逐个单元格自行猜测:邮编丢掉前导零,16位ID变成1.23457E+15,SEPT2这样的基因名变成日期,以分号分隔的文件全部挤进一列。本转换工具按列判断一次,依据该列的全部值,只有整列一致时才转换。

日期是怎么识别的?

按列识别。15/03/2024和03/15/2024会根据同一列中的其他日期区分开;ISO日期、时间和月份名称也能识别。日期会变成真正的Excel日期,并按您原来的书写顺序显示。如果某一列确实有歧义,您可以自己选择日在前或月在前。

我的文件用分号分隔,小数点是逗号。

会自动检测:9,8会变成数字9.8,1.234,56会变成1234.56。您也可以手动设置分隔符和小数点符号。

支持哪些字符编码?

UTF-8和UTF-16会自动检测;旧版Windows程序保存的文件——西欧和中欧语言、西里尔字母、希腊文、土耳其文、希伯来文、阿拉伯文、日文、中文和韩文——也能被识别或手动选择,因此ą、ß、Ж和日本都能正确显示。

我的数据会被存储吗?

不会。文件在这里读取,工作簿也在这里生成;不会发送到任何地方,也不存储任何文件。

CSV会在打开工作簿时运行公式吗?

不会。以=开头的单元格会存储为文本,绝不会作为公式,所以恶意CSV无法在Excel中执行任何操作。关闭类型检测后,每个单元格都会完全以文本形式保留。

小贴士: 一个Excel工作表最多容纳1,048,576行;更长的文件会续写到额外的工作表中,并重复标题行。非常大的文件(数百MB)受限于您设备的内存。

把这个工具放到您的网站上

博客、课程页面或帮助文章均可免费使用。粘贴一段代码,访客就能直接在您的页面上使用。