在 Excel 中保存到 CSV 会丢失区域日期格式

问题描述 投票:0回答:10

我有一个 .xls,需要转换为 .csv

该文件包含一些日期列。日期的格式为“*14/03/2001”,根据 Excel,这意味着日期响应为操作系统指定的区域日期和时间设置。

在Excel中打开你看到:

20/01/2013
01/05/2013

另存为... CSV

用记事本打开:

01/20/2013
05/01/2013

我通过将日期格式设置为“14/03/2001”(无 *)来临时修复,但即使是其他一些没有 * 的自定义格式,例如“d/mm/yyyy h:mm”在保存到 CSV 时也会被破坏。

excel csv export-to-csv
10个回答
14
投票

在日历设置下以“短日期”格式更改计算机的日期和时间设置。 这将更改所有内容的格式 yyyy-mm-dd 或您想要的显示方式;但请记住,即使对于保存在计算机上的文件,它也会看起来像这样。

至少它有效。


13
投票

尽管记住这一点http://xkcd.com/1179/

最后我决定在所有 CSV 文件中使用

YYYYMMDD
格式,该格式不会在 Excel 中转换为日期,但可以被我们所有的应用程序正确读取。


13
投票

您可以按照以下步骤将所需的日期格式从 Excel 保存为 .csv,希望 Excel 大师可以进一步完善并减少步骤数:

  1. 创建一个新列 DATE_TMP 并将其设置为等于 =TEXT( oldcolumn, "date-format-arg" ) 公式。

例如,在您的示例中,如果您的日期位于 A 列中,则该新列的第 1 行中的值将为:

=TEXT( A1, "日/月/年" )

  1. 在现有日期列旁边插入空白列 DATE_NEW。

  2. 使用“粘贴为值”选项将 DATE_TMP 的内容粘贴到 DATE_NEW 中。

  3. 删除 DATE_TMP 和现有日期列,将 DATE_NEW 重命名为旧日期列。

  4. 另存为 csv。


5
投票

您需要做的工作远不止 1. 单击导出 2. 打开文件。

我认为,当 Excel CSV 文档谈到解释操作系统和区域设置时,这意味着 Excel 在打开文件(采用“特殊”csv 格式)时会执行此操作。 请参阅这篇文章,“Excel 格式和功能不会转移到其他文件格式”

此外,Excel 实际上存储的是数字,并转换为日期字符串仅用于显示。 当它导出到 CSV 时,它会将其转换为不同的日期字符串。 如果您希望该日期字符串不是默认的,则需要在执行导出之前将 Excel 单元格转换为字符串。

或者,您可以将日期转换为 Excel 保存的数值。 由于这是一个时间代码,它实际上会遵守操作系统和区域设置,假设您正确导入它。 不过,记事本只会显示 10 位数字。


5
投票

如果您使用自定义格式,而不是预先选择的日期格式之一,则导出到 CSV 将保留您选择的格式。否则它会默认返回美国格式


2
投票

在日期前面放置一个撇号,它应该以正确的格式导出。刚刚自己发现,我发现这个帖子正在寻找答案。


0
投票

我为此使用的一个不太可扩展的修复方法是将数据复制到纯文本编辑器,将单元格转换为文本,然后将数据复制回电子表格。


0
投票

将日期范围更改为“常规”格式并保存工作簿一次,然后在保存并关闭工作簿之前将其更改回日期格式(例如,

numberformat = "d/m/yyyy"
)。
savechanges
参数为真。


0
投票

您可以将日期发送到 Excel,不像 “日期” 那样,而只是像 “字符串” 那样,在字符串的开头和结尾处有 空白。

您的问题是由于 Excel 看到您的

'11/02/2023' 像日期一样发生的,但您可以破解它并将此日期更改为简单的字符串,如 ' 11/02/2023 '

:'11/02/2023'

新(解决方案):' 11/02/2023 '


0
投票
从记录集中读取数据进行处理然后输出为 CSV 时也遇到类似的问题。 以下似乎已经修复了它:

Imps.Cells(ImpRow, 17).Value =

"'" & Format(srst(2).Value, "dd/mm/yyyy")

将相关列 (17) 格式化为文本。 srst 是记录集数据,Imps 和 ImpRow 只是 Sheet 和 Row 指针。

© www.soinside.com 2019 - 2024. All rights reserved.