从CSV文件重新格式化数据

时间:2012-05-14 09:16:44

标签: excel csv

我有来自csv文件的数据。一列包含像“0.2.11”这样的文本,我需要重新格式化为“00.02.0011”,前导零和点分离部分的长度是至关重要的。这些都不是日期,只是随机数字。我怎样才能重新格式化?

感谢。

2 个答案:

答案 0 :(得分:1)

我知道这是一个疯狂的长公式,但我相信它会做你想要的:

=IF(LEN(IF(ISERR(FIND(".",A1)),A1,LEFT(A1,FIND(".",A1)-1)))=2,IF(ISERR(FIND(".",A1)),A1,LEFT(A1,FIND(".",A1)-1)),"0"&IF(ISERR(FIND(".",A1)),A1,LEFT(A1,FIND(".",A1)-1)))&"."&IF(RIGHT(MID(A1,FIND(".",A1)+1,2))<>".",MID(A1,FIND(".",A1)+1,2),"0"&LEFT(MID(A1,FIND(".",A1)+1,2),1))&"."&IF(LEN(RIGHT(A1,LEN(A1)-FIND("*",SUBSTITUTE(A1,".","*",LEN(A1)-LEN(SUBSTITUTE(A1,".",""))))))=4,RIGHT(A1,LEN(A1)-FIND("*",SUBSTITUTE(A1,".","*",LEN(A1)-LEN(SUBSTITUTE(A1,".",""))))),IF(LEN(RIGHT(A1,LEN(A1)-FIND("*",SUBSTITUTE(A1,".","*",LEN(A1)-LEN(SUBSTITUTE(A1,".",""))))))=3,"0"&RIGHT(A1,LEN(A1)-FIND("*",SUBSTITUTE(A1,".","*",LEN(A1)-LEN(SUBSTITUTE(A1,".",""))))),IF(LEN(RIGHT(A1,LEN(A1)-FIND("*",SUBSTITUTE(A1,".","*",LEN(A1)-LEN(SUBSTITUTE(A1,".",""))))))=2,"00"&RIGHT(A1,LEN(A1)-FIND("*",SUBSTITUTE(A1,".","*",LEN(A1)-LEN(SUBSTITUTE(A1,".",""))))),"000"&RIGHT(A1,LEN(A1)-FIND("*",SUBSTITUTE(A1,".","*",LEN(A1)-LEN(SUBSTITUTE(A1,".",""))))))))

可能已经足够长了,您必须将其保存为一种新的Excel格式,例如.xlsx或.xlsm才能保存。如果您遇到问题请告诉我,如果您需要,我也可以将公式分成几个单元格(或步骤)。

答案 1 :(得分:0)

有一个较短(但仍然很难看)的Excel公式,使用TEXT函数进行格式化:

=TEXT(MID(A1,1,FIND(".",A1)-1),"00") &"."& TEXT(MID(A1,FIND(".",A1)+1,FIND(".",A1,FIND(".",A1)+1)-FIND(".",A1)-1),"00") &"."& TEXT(RIGHT(A1,LEN(A1)-FIND(".",A1,FIND(".",A1)+1)),"0000")

我想指出还有其他方法可以解决同样的问题。如果你有很多大的csv文件,你可以考虑在导入Excel之前进行预处理。例如,在awk中完成相同的工作是微不足道的:

BEGIN {
    while(getline < "e.csv") {
        split($1,a,".");
        printf("%02d.%02d.%04d\n",a[1],a[2],a[3]);
    }
}

Gawk适用于Windows。安装后,您可以在Windows或PowerShell命令行上以.\awk -f x.awk运行它,其中x.awk是文本文件中的上述代码。