excel文件保存为指定分隔符的文本文件
假设我们当前需求为:将一个xlsx格式的excel文件转换为以|
作为分隔符的txt文本文件。
我们通常的方法有:
- 将整个excel复制出来,替换
\t
为|
符号。但这种方法要求你的文本处理工具需要有正则功能,例如ue、notepad++等。而且像ue这种工具你可能还需要通过ctrl+h
转换到16进制,替换16进制的\t
符号(即09
)为16进制的|
符号(即7C
)。
09
、7C
是table键(\t
)、|
符号的16进制ascii值,可以在以下网址找到对应数值:http://ascii.911cha.com
-
在excel中,通过
concat
公式或&
符号,手动拼接字符串,然后粘贴到txt文件中。 -
与方法1类似,在excel中先通过另存为csv的方式导出以逗号作为分隔符的文件,然后再替换逗号为|符号。
上述方法,要么是需要手动拼接,要么是需要手动做分隔的替换工作。当记录数量较少或格式没那么复杂的情况下问题不大,但是当记录数达到几十万上百万以后,替换操作会非常缓慢,并且如果文件中出现超长度的数值或是日期等特殊数据格式时,可能导出的数据还会出现各种各样的问题。
因此我们可以使用以下的方式进行处理。
通用处理方式
首先,我们的处理方式总结起来,就是修改系统中的分隔符配置,这样在excel中导出csv就是我们想要的分隔符了,之后在修改为txt后缀就完成了处理。
假设我们有以下数据:
1.jpg
将其另存为csv文件:
2.jpg
这时以文本方式打开csv文件,会发现实际上这是一个以逗号为分隔符的普通文本文件:
3.jpg
打开控制面板,点击更改日期、时间或数字格式
:
点击其他设置
:
在打开的窗口中,将列表分隔符由原来的,
修改为|
,点击确定
/应用
:
这时回到excel中,同样的我们使用另存为csv的方式进行处理:
8.jpg
再次以文本文件的方式打开csv文件,就会发现分隔符已经变成了|
:
特殊处理
末尾需要增加一个分隔符
有时候需要我们在末尾添加一个分隔符,例如a|b|c
需要我们输出为a|b|c|
,这时我们只需要在excel文件的最后填充一列内容为=""
,即填充一列空白字符:
这时再重复导出csv的步骤,导出的文件中就会多出一列|
:
内容中存在超长数字或日期等特殊格式
超长数字或日期格式可能会导致的问题
- excel中,11位及11位以下的数字将会以普通数字的方式进行展示和输出,而超过11位的数字将会以
1.2345E+11
这样的科学计数法表示。如果此时我们按以上的方式导出为csv,它的内容将同样被修改为1.2345E+11
,这是我们不希望看到的。 - 日期格式在excel中,是可以用普通日期格式和数字格式两种方式展示的。如果某一列我们使用的是日期格式,此时我们如果对其进行处理,例如将其复制到了另一列,或是使用
trim
、clean
等公式进行去除空格、去除不可见符号等操作时,excel会将其转换为默认的数字格式(因为数字格式较为通用,而且也方便转换为其他格式,但是它可能会带来精度丢失)。此时如果我们直接导出为csv,看到的将会是日期的数字表示形式而不是我们想要的yyyy/mm/dd
形式。
12.jpg
处理方式
数字格式的处理
对于数字格式,选中该列,点击数据
,在选择分列
,一路点击下一步,到步骤3列数据格式选择
,选择为文本
,并点击完成:
16.jpg
此时我们会发现之前以科学记数法表示的超长数字此时是以文本数字的方式展示的(特点是左上角有一个绿色的小三角):
17.jpg
日期格式的处理
选中日期列,通过分列的方式将其修改为文本格式:
18.jpg
此时原来日期那一列可能没什么特别的表现,但是公式中引用日期列的部分,将会以普通文本的方式进行展示,而不再使用数字的方式展示日期:
19.jpg
导出结果
此时我们使用跟之前一样的方式,导出为csv,并以文本方式打开csv文件,会发现数字部分是以普通数字的方式输出的,日期部分也是以普通日期格式进行输出的:
20.jpg
收尾工作
导出为csv后,将其后缀修改为txt就可以直接拿来使用了。
此外,由于不确定是否有其他文件会用到这个系统分隔符,所以为避免出现问题,再处理完以后建议将分隔符还原为默认的,
: