gpt4 book ai didi

c++ - 为日期设置 Excel NumberFormat,忽略 native C++ 中的语言环境

转载 作者:行者123 更新时间:2023-11-28 03:22:24 26 4
gpt4 key购买 nike

我正在使用来自 native C++ 的 Excel COM 自动化。我的目标是设置日期范围的 NumberFormat。问题是,Excel 期望的格式字符串取决于用户的区域设置。

例子:如果语言环境是英语,我必须将 NumberFormat 设置为“dd.mm.yyyy”如果语言环境是德语,我需要使用“TT.MM.JJJJ”来获得相同的结果。

我找到了很多 .NET 的解决方案,遗憾的是我没有那么多。通常的解决方案是暂时将 Excel 线程的语言环境设置为英语,但使用 native C++ 似乎不可能。

我可以读取默认的系统语言环境,然后对不同的格式字符串进行硬编码,但是一旦有人使用我没有明确包含的语言环境,这就不会起作用,所以这是一个糟糕的解决方案。

那么,我该如何解决这个问题,以便无论使用哪种语言环境都能正常工作?

最佳答案

一种可能的解决方案是使用系统时间格式化程序(如:_tcsftime、strftime、wcsftime)将日期/时间结构格式化为运行系统的区域设置。由于您的程序和 excel 都应该在同一台 PC 上运行,因此即使不知道本地日期/时间字符串是什么样子,它也应该可以正常工作。

作为后备解决方案,您可能必须在程序的选项配置部分提供一系列硬编码格式字符串和/或用户手动输入的字符串,以防默认区域设置格式失败。

OP 第一次回复评论后的附加信息:----------------

locale 设置仅影响 UI 中 datetime-binary-object 的文本显示呈现。这样的 datetime-binary-object 总是以非常一致的方式存储为二进制结构,无论区域设置如何,即使在其每个不同的上下文中,无论是在 Excel(日期/时间格式单元格),C++(各种结构取决于 api) , VisualBasic(变体)。

因此,如果您打算将日期时间二进制结构导出到 excel,而不是作为 strng,您始终可以使用“变体”类型来存储日期值,因为 excel 自动化使用 IDispatch 接口(interface)。您可以完全忘记语言环境设置。

添加代码片段以导出日期时间变量并按代码格式化单元格:----------------

我用的是MFC所以代码很简单,可能需要自己转成winapi

_Application app;
if (!app.CreateDispatch("Excel.Application"))
{ AfxMessageBox("Cannot start Excel !");
return;
}
app.SetVisible(TRUE);
COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
Workbooks objbooks = app.GetWorkbooks();
_Workbook objbook = objbooks.Add(VOptional);
Worksheets objsheets = objbook.GetWorksheets();
_Worksheet objsheet = objsheets.GetItem(COleVariant((short)1));

// get current date time
COleDateTime timeCurrent = COleDateTime::GetCurrentTime();

// setting date values
Range range;
range = objsheet.GetRange(COleVariant("A2"), COleVariant("B3"));
range.SetValue(COleVariant(timeCurrent));
// range.SetNumberFormat(COleVariant("dd/mm/yyyy"));
range.SetNumberFormat(COleVariant("dddd, mmmm dd, yyyy"));

AfxMessageBox("Done...");

关于c++ - 为日期设置 Excel NumberFormat,忽略 native C++ 中的语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15070876/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com