【发布时间】:2013-11-07 10:15:37
【问题描述】:
我在格式化 Excel 日期时间时遇到问题,以便它可以在国际范围内使用。我们的程序是用 C++ 编写的,并使用 COM 将数据从我们的数据库导出到 Excel,其中包括日期时间字段。
如果我们不提供格式掩码,某些安装的 Excel 会将这些日期显示为序列号(自 1900.01.01 以来的天数,后跟时间为 24 小时小数部分)。这对人类来说是不可读的,所以我们发现我们必须提供一个日期格式掩码以确保它显示可读。
问题 - 如我所见 - 是 Excel 使用国际格式掩码。例如;英国日期时间格式掩码可能是“YYYY-MM-DD HH:MM”。
但是,如果将格式掩码发送到安装在瑞典的 Excel,则会失败,因为瑞典版的 Excel 使用“ÅÅÅÅ-MM-DD tt:mm”。
在我们的应用程序中使用 150 个不同的国家日期时间格式掩码来支持不同的国家/地区是非常不切实际的。
有没有办法编写格式掩码,以便它们包含语言环境,这样我们就可以使用一个单一的掩码?
【问题讨论】:
-
是否可以询问操作系统或 Excel 应用程序具有的本地化长日期掩码并应用它?
-
在 Excel 中,您可以访问本地日期格式
NumberFormatLocal和美国日期格式NumberFormat。如果您的 C++ 程序可以与 Excel 交互,您可以检查NumberFormatLocal中的预设单元格,或者您会以这种方式循环运行吗? -
谢谢,我会检查的。但我认为它也是本地化的,所以如果它是美国 Excel,你必须要求“短日期”,但如果它是瑞典 Excel,你必须要求“Kort datum”,否则你会得到一个垃圾答案。到目前为止,这是第 22 条渔获。 :)
-
K_B:我使用 Range->NumberFormat(),但奇怪的是我不能在那里使用美国日期格式(这不是根据文档)。如果我这样做 (PutNumberFormat(L"yyyy-mm-dd")),我将返回日期为“yyyy-57-31”(57 是分钟,31 是天)。 Excel 文档在这方面非常稀疏——它看起来是由某些工具自动生成的。这里有谁知道 NumberFormat 和 NumberFormatLocal 的区别,能解释一下吗??
-
@LasseSL500:您通过 COM 将哪些值放入单元格中?您是使用 Excel 纪元以来的天数,还是将单元格设置为带有日期的字符串?