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

Posted

技术标签:

【中文标题】在 Excel 中保存为 CSV 会丢失区域日期格式【英文标题】:Saving to CSV in Excel loses regional date format 【发布时间】:2013-01-23 15:27:41 【问题描述】:

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

该文件包含一些日期列。日期格式为“*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 时也会出现错误.

【问题讨论】:

我希望以原始格式保留日期。 可以尝试将SaveAs的最后一个参数(Local)设置为true;这应该保持您原来的 excel 日期格式。 【参考方案1】:

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

最后我决定在所有 CSV 文件中使用YYYYMMDD 格式,它不会在 Excel 中转换为日期,但可以被我们所有的应用程序正确读取。

【讨论】:

这就是我想要实现的。 CSV 不断将其改回来【参考方案2】:

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

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

例如,在您的示例中,如果您的日期在 A 列中,则此新列的第 1 行中的值将是:

=TEXT(A1, "dd/mm/yyyy" )

    在现有日期列旁边插入一个空白列 DATE_NEW。

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

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

    另存为 csv。

【讨论】:

这对我不起作用。将格式更改为 YYYY-MM-DD,列类型为 Text,但重新打开时仍显示为 DD/MM/YYYY。 @Pawel - 问题是如何让 Excel 保存特定的日期格式,而不是如何防止它在每次打开时弄乱日期格式。上述方法并不能防止 Excel 每次重新打开时都会弄乱日期,但它至少允许您保存它。 你是对的,我的错。我在文本编辑器中检查了它并正确转换了值。【参考方案3】:

在日历设置下以“短日期”格式更改您计算机的日期和时间设置。这将更改所有 yyyy-mm-dd 的格式,或者您希望它显示的任何格式;但请记住,即使是保存在您计算机上的文件也是如此。

至少它有效。

【讨论】:

我不敢相信这是解决这个问题的方法。谢谢 我在 Windows 7 中看不到“日历设置”。【参考方案4】:

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

我认为,当 Excel CSV 文档谈到正在解释的操作系统和区域设置时,这意味着 Excel 在打开文件时会这样做(这是它们的“特殊”csv 格式)。看这篇文章,"Excel formatting and features are not transferred to other file formats"

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

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

【讨论】:

【参考方案5】:

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

【讨论】:

确认这有效。安全后在记事本中打开 .csv 文件,以确认您看到预期的日期格式。保存后在 Excel 中打开 .cvs 文件将使用默认的美国格式格式化日期。 值得注意的是,日期将由双引号分隔,例如"May 10, 1960". ...在 CSV 文件中。【参考方案6】:

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

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

将日期范围更改为“常规”格式并保存工作簿一次,然后在保存和关闭工作簿之前将其更改回日期格式(例如,numberformat = "d/m/yyyy")。 savechanges参数为真。

【讨论】:

以上是关于在 Excel 中保存为 CSV 会丢失区域日期格式的主要内容,如果未能解决你的问题,请参考以下文章

如何设定PLSQL DEVELOPER导出的CSV文件中单元格格式为文本?

excelportCSV如何下载

在Excel里,日期为啥变成了数字

如何将 Excel 中的日期转换为 ISO 8601 格式

使用 VBA 将单元格区域导出到新的 .csv 文件中并保存而不覆盖

java生成csv格式文件后,用excel打开,单元格显示问题