- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我当前使用的产品中,Excel 电子表格是使用 Delphi 的 OLE 生成的。电子表格包含许多日期,应用程序从系统设置加载短日期格式并将其应用到单元格。除非系统格式至少设置为俄语、巴什基尔语、鞑靼语、雅库特语、哈萨克语和乌兹别克语之一(可能还有其他我还没有尝试过),否则这种方法效果很好。
代码是-
xlws.Cells[irow,icol] := ActivityData.Target_Date;
xlvalidrange := xlws.Range[xlws.Cells[irow,icol],xlws.Cells[irow,icol]];
xlvalidrange.NumberFormat:= LocShortDateFormat;
在本例中(调试时),ActivityData.Target_Date 为 41192,这是 Excel 存储日期和时间的格式,LocShortDateFormat 等于“dd.MM.yyyy”。这与 Windows 中显示的俄语存储日期格式匹配,并使用以下代码以编程方式检索:
LocShortDateFormat := ShortDateFormat;
打开具有此格式的电子表格会显示消息-
Excel found unreadable content in Spreadsheet.xlsx Do you want to recover the contents of this workbook?
执行此操作后,数据将简单地显示为数字 41192,单元格中没有任何格式。更奇怪的是,手动应用“dd.MM.yyyy”格式字符串,然后在单元格中显示“dd.MM.yyyy”来代替数据。
这同样适用于任何标准日期/时间字符串格式字符。通过选择“日期”类别和相应的类型作为格式,可以手动将数据更改为日期格式,然后正确显示,因此这不是数据的问题,而是格式字符串的问题。
手动选择正确的日期格式时 Excel 使用的格式字符串是 ДД.ММ.ГГГГ - 手动更改调试时使用的格式字符串会在生成的电子表格中产生正确的输出,并且不可读的内容消息会消失。
奇怪的是,中文、日语、塞尔维亚语和马其顿语(作为非英语字符集语言的示例)都可以使用标准日期/时间格式字符。
在 Excel 本身中,即使电子表格是新的且不是以编程方式创建的,即从 Excel 应用程序内创建的新电子表格,标准字符似乎也无法正常工作。
既然如此,这似乎不是 Delphi 或 Windows 的问题(即使在俄语语言环境下,C# Windows 表单也可以使用标准字符正确格式化日期),但它仍然留下了如何获取返回值的问题Delphi 中正确的格式化字符串。
我不热衷于对已知有问题的语言环境进行一系列条件“if”语句测试,但这似乎是根据我迄今为止所做的研究来处理该问题的唯一方法。
是否有任何方法可以要求 Excel 通过 OLE 使用本地日期格式而不提供格式字符串,或者获取 Excel 用于在该本地化中格式化日期的字符串,以便提供正确格式的字符串?
最佳答案
是的,您可以使用 Excel 应用程序实例上的 International
属性获取各种国际化/本地化字符和字符串。后期绑定(bind)示例:
function GetExcel_International(const aExcel: OleVariant; const aIndex: Integer): string;
begin
try
Result := aExcel.International[aIndex];
except
...
end;
end;
我们用它来获取组成格式化字符串的各种字符:
ExcelYearCharacter := GetExcel_International(FExcelApplication, xlYearCode);
ExcelMonthCharacter := GetExcel_International(FExcelApplication, xlMonthCode);
ExcelDayCharacter := GetExcel_International(FExcelApplication, xlDayCode);
ExcelHourCharacter := GetExcel_International(FExcelApplication, xlHourCode);
ExcelMinuteCharacter := GetExcel_International(FExcelApplication, xlMinuteCode);
然后我们使用这些将 Windows 格式转换为 Excel 格式:
function ConvertWindowsLocalDateStringToExcel(const aString: string): string;
begin
Result := StringReplace(aString, UpperCase(WindowsYearCharacter),
UpperCase(ExcelYearCharacter), [rfReplaceAll]);
Result := StringReplace(Result, LowerCase(WindowsYearCharacter),
LowerCase(ExcelYearCharacter), [rfReplaceAll]);
Result := StringReplace(Result, UpperCase(WindowsMonthCharacter),
UpperCase(ExcelMonthCharacter), [rfReplaceAll]);
Result := StringReplace(Result, LowerCase(WindowsMonthCharacter),
LowerCase(ExcelMonthCharacter), [rfReplaceAll]);
Result := StringReplace(Result, UpperCase(WindowsDayCharacter),
UpperCase(ExcelDayCharacter), [rfReplaceAll]);
Result := StringReplace(Result, LowerCase(WindowsDayCharacter),
LowerCase(ExcelDayCharacter), [rfReplaceAll]);
end;
所有 xl...
常量都来 self 们自己的单元之一,但您也应该能够在早期绑定(bind)的 Delphi OLE 服务器包装器中找到它们。例如,在 Delphi/RAD Studio 安装的 ...\OCX\Servers
文件夹中的 ExcelXP
单元中。
有关 Application.International
属性的更多信息可以在以下位置找到: http://msdn.microsoft.com/en-us/library/office/bb177675(v=office.12).aspx
关于excel - OLE Excel 输出中的国际日期格式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16946077/
我需要一个正则表达式来匹配所有标点符号,例如标准的 [,!@#$%^&*()],但包括国际标记,例如倒置的西类牙语问号、中文句号等.我的 google-fu 快用完了。有人手头有这样一个与 Javas
跟进之前的 question我有关于水平数组和垂直数组的问题,我对它们各自的分隔符有疑问。 问题定义: 这里是比较两个数组的错误方法的示例: {=SUMPRODUCT(--({"Apple","Pea
我正在尝试对手机号码进行验证检查,有点类似于 gmail 的实现。 Gmail signup page link 但是各个国家/地区的电话号码差异很大,因此很难为此构建正则表达式。 我在这里查看了一些
这就是我们所拥有的: 数据库中的用户,包括 phone_number 字段。当用户创建他们的帐户时,他们必须输入他们的电话号码。我们可以要求特定的格式,我们会这样做: + [countrycode]
对于Google-Chrome扩展程序,我想在所有Google页面上加载内容脚本。做这个的最好方式是什么? 我在manifest.json中尝试了此操作,但它不起作用: "matches": ["ht
在 JavaScript 中使用数字格式化程序时,是否可以在值之前使用欧元符号来格式化值? this.formatter = new Intl.NumberFormat('nl-be', { st
我们有一个 iOS 应用程序,在美国拥有数百万用户,需要国际化并在 11 个不同的国家/地区(许多国家/地区使用不同的语言)提供。已制定出适用于特定国家/地区以及不同货币等的公开隐藏功能的所有技术细节
如何在使用 react-intl 时使用 来控制断字。我有一条像 Rs 这样的消息。 100,00,000 但它正在打破卢比。无论如何可以将消息写为 Rs. 100,00,000当我尝试这样做时,
我正在研究具有端点的 swagger API 规范: /authorizations 我也想为这个端点定义一个替代拼写(授权)。这可能吗?或者我是否需要为每个拼写定义一个单独的路由? /authori
我正在研究具有端点的 swagger API 规范: /authorizations 我也想为这个端点定义一个替代拼写(授权)。这可能吗?或者我是否需要为每个拼写定义一个单独的路由? /authori
我正在尝试安装 CakePHP 3-0-0 版本并且我已经从 here 下载了源代码.但它显示启用 intl 扩展 的错误。因为我已经在 php.ini 文件中将 ;extension=php_int
#include #include #include int main() { const wchar_t *str = L"\u041F\u043E\u0440\u044F\u0434
Transliterator::listIDs()将列出 ID,但显然它不是完整列表。 在example from this page ,ID 看起来像: Any-Latin; NFD; [:Nons
任务是在不同的语言环境中显示订阅价格,例如 5$/month。 我可以用 Intl 管理价格部分很好,但坚持时间段翻译部分。 我可以使用自己的翻译字符串,但如果可能,我更愿意使用默认的 Intl 版本
任务是在不同的语言环境中显示订阅价格,例如 5$/month。 我可以用 Intl 管理价格部分很好,但坚持时间段翻译部分。 我可以使用自己的翻译字符串,但如果可能,我更愿意使用默认的 Intl 版本
我正在使用 React 制作一个多语言通用应用程序,但我很难找到处理区域设置数据的最佳方法。该应用程序将提供 16 种语言版本,并且翻译的消息量非常大,因此我无法将所有消息加载到一个大 json 中(
我是一名优秀的程序员,十分优秀!