我有来自 csv 文件的数据。一列包含像“0.2.11”这样的文本,我需要将其重新格式化为“00.02.0011”,前导零和点分隔部分的长度至关重要。这些不是日期,只是随机数字。我怎样才能重新格式化那些?
谢谢。
我知道这是一个非常长的公式,但我相信它会满足您的需求:
=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 才能保存。如果您遇到问题,请告诉我,如果您需要,我还将公式分解为多个单元格(或步骤)。
有一个更短(但仍然丑陋)的 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 是文本文件中的上述代码。