![如何转换混合格式的畸形日期?](https://linux22.com/image/1556986/%E5%A6%82%E4%BD%95%E8%BD%AC%E6%8D%A2%E6%B7%B7%E5%90%88%E6%A0%BC%E5%BC%8F%E7%9A%84%E7%95%B8%E5%BD%A2%E6%97%A5%E6%9C%9F%EF%BC%9F.png)
我正在做一个清理公司数据的项目。一个特别可怕的文件是一份约有 30,000 行的 Excel 表。
此工作表中的日期列填充了多种不同格式的日期,其中许多格式不是有效的 Excel 日期格式。
以下是一些格式:
8/26/2017
20170925
2017-08-10
43026
43040.46597
我需要以某种方式将所有这些都转换为一种没有时间戳的标准格式。
由于格式太多,我尝试检查LEN()
以便将格式分组在一起(尽管一些不同的格式也有相同的长度)。
我花了大量的时间尝试多种方法来转换日期,并且可以在新列中获得正确的格式,但由于我需要使用过滤功能,我无法将更正后的格式复制/粘贴回原始列。
仅选择可见的行就可以了,但是在粘贴时,无论我做什么,我仍然会丢失隐藏行中的大量数据。
有什么方法可以解决这个问题,而不必一次浏览所有 30,000 行并复制/粘贴或手动输入正确的日期格式?
答案1
您真正的问题似乎在于能够将更正后的数据从一列移回到原始列。
解决跨过滤行复制/粘贴问题的一种方法是,将包含更正数据的列定位在其左侧原始数据列的旁边。
然后选择正确列上的值范围并按 Ctrl+Shift+右箭头键选择原始列上的相应单元格,然后按 Ctrl+R。
这会将数据从您选择的最左侧单元格复制到您选择的其余单元格,而不会触及不可见行中的数据。
希望这可以帮助!
答案2
dateconv
使用来自的外部 Excel 解决方案日期工具:
$ dateconv -i %F -i %m/%d/%Y -i %Y%m%d <<EOF
8/26/2017
20170925
2017-08-10
EOF
=>
2017-08-26
2017-09-25
2017-08-10
这个想法是使用多个标志指定所有可能的输入格式-i
。默认输出格式是,%F
但可以使用 进行更改-f
。
我不知道如何转换最后两个数字,它不是标准的天数(例如 Matlab 自 0000-01-01 以来的天数或儒略天数或莉莲天数)。