- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了以下问题:
当我的 Delphi 程序通过 OLE 自动执行 Excel 并尝试设置单元格的 NumberFormat 属性时,Excel 需要本地化格式的格式字符串。
通常,当通过在 Excel 中录制宏来检查格式时,Excel 会期望如下所示:Cells(1, 2).NumberFormat = "#,##0.00"
这意味着千位分隔符是“,”,小数分隔符是“.”。
实际上,我使用的是 Excel 的本地化版本。在我的语言环境中,千位分隔符是“”,小数分隔符是“,”。
因此,每当从我的 Delphi 程序中设置 NumberFormat 时,我都需要将其指定为“# ##0,00”。
我的问题是:显然,如果我在程序中对这些值进行硬编码,那么当我的程序与英语或其他不同本地化版本的 Excel 一起使用时,就会出现异常。是否有设置 NumberFormat 属性的“通用”方法? (使用默认的英语语言环境?)
谢谢!
更新:我在此页面上找到了一种更优雅的方法: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=920&mode=print它是俄语的(我也不会说),但你可以轻松理解代码。
最佳答案
在 Excel 中,您有两个字段:
数字格式
NumberFormatLocal
NumberFormat 采用美国标准中始终保持区域设置不变的格式,并且 NumberFormatLocal 期望采用设置的区域设置的格式。
例如
Sub test()
Dim r As Range
Set r = ActiveWorkbook.ActiveSheet.Range("$A$1")
r.NumberFormat = "#,##0.00"
Set r = ActiveWorkbook.ActiveSheet.Range("$A$2")
r.NumberFormat = "#.##0,00"
Set r = ActiveWorkbook.ActiveSheet.Range("$A$3")
r.NumberFormatLocal = "#,##0.00"
Set r = ActiveWorkbook.ActiveSheet.Range("$A$4")
r.NumberFormatLocal = "#.##0,00"
End Sub
使用德语设置(十进制 sep: 和千位 sep: .)可为您提供 $A$1 和 $A$4 的正确格式数字。如果您将 Windows 中的区域设置更改为您喜欢的任何内容,您可以测试它,并尝试一下您的格式是否有效。
假设您使用 Delphi 5 并具有像这样启动 Excel 的代码(并且可以访问 ComObj.pas):
var
oXL, oWB, oSheet : Variant;
LocaleId : Integer;
begin
oXL := CreateOleObject('Excel.Application');
oXL.Visible := True;
oWB := oXL.Workbooks.Add;
oSheet := oWB.ActiveSheet;
oSheet.Range['$A$1'].NumberFormatLocal := '#.##0,00';
oSheet.Range['$A$2'].NumberFormatLocal := '#,##0.00';
LocaleID:= DispCallLocaleID($0409);
try
oSheet.Range['$A$3'].NumberFormat := '#.##0,00';
oSheet.Range['$A$4'].NumberFormat := '#,##0.00';
finally
DispCallLocaleId( LocaleId);
end;
end;
默认情况下,每个调用都会经过 ComObj.VarDispInvoke,后者调用 ComObj.DispatchInvoke。在那里您可以找到对 Dispatch.Invoke 的调用,该调用获取 lcid 作为第三个参数。设置为 0。您可以使用注释中第一个链接中显示的技术来创建您自己的单元并将所有代码从 ComObj 复制到您自己的单元(或直接修改 ComObj)。只是不要忘记在单元初始化时设置 VarDispProc 变量。最后一部分似乎不适用于所有情况(可能取决于模块的顺序),但您可以在代码中设置变量:
VarDispProc := @VarDispInvoke;
您必须将 VarDispInvoke 放入 ComObj 复制模块的接口(interface)部分。第一个链接的代码不能直接工作,因为它修改了上面的 Delphi 示例中未调用的不同方法。
更改 numberformat 调用的区域设置就足够了(以避免副作用)。
上面的示例以及所描述的修改适用于我的德语 Excel 正确。如果没有修改或调用 DispCallLocaleId,我会看到与您描述的相同的问题。
关于delphi - 自动化不同本地化版本的 Excel 时如何正确设置 NumberFormat 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10947727/
翻译 silverlight 5 应用程序 (Prism + MEF) 的可用选项是什么? 如果可能的话,我想: 没有 resx 文件(我不喜欢它们的管理方式) 而是提取并翻译 xaml 字符串(我认
我可以同时使用这两种方法来本地化 $| 还是我应该使用其中一种来支持另一种? 方法一:备份“_init_scr”中$|的旧值,并在调用“_end_win”时将$|设置回旧值。方式 2:调用 local
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: C# localization , really confusing me 有人可以分享他们对大型 C# 应
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我正在使用 Phoenix 框架开发多语言应用程序 到目前为止,路由器看起来像这样: scope "/:locale", App do pipe_through [:browser, :bro
我想为我的域对象添加本地化支持。我有以下几点: class Person { int Id; City city; } class City { int Id; str
我需要 BlackBerry 本地化方面的帮助。我在 http://na.blackberry.com/eng/developers/resources/developer_labs.jsp#tab_
我正在尝试通过关注 documentation 来本地化我的 Flutter 应用程序. 我想要实现的是,在动态构建小部件的同时,我想转换来自我的模型的数据。这是我迄今为止尝试过的 List.gene
如何更改 EKEventEditViewController 中的默认语言,即使我手动设置 AppleLanguages 对象,它也始终是英语 最佳答案 我通过向我的应用程序 plist 添加一个 L
我在 iphone 日期选择器中遇到本地化问题。我希望日期选择器仅以英语显示日期,但现在它需要在 iphone 设置中设置为区域的语言。我尝试了各种没有用的方法像下面这样。 在 uidatepicke
我的应用仅支持荷兰语和法语。英语不是此应用程序的可用语言。如果我想使用可本地化的字符串,则默认值始终设置为英语。我希望这是荷兰语。所以我所做的就是使用英语可本地化字符串文件并用荷兰语单词填充它。我遇到
我即将本地化 iPhone 应用程序。当用户的语言(iOS 系统语言)是德语时,我想使用不同的 URL。 我想知道这是否是正确的方法: NSURL *url = [NSURL URLWithStrin
我正在将我的 iPhone 应用程序本地化为多种语言,除了更改一些字符串之外,我还需要更改一些背景。是否可以查询iPhone并获取用户的语言代码? 谢谢! 最佳答案 看一下 NSLocale: NSS
在本地化的 Iphone(语言设置为希伯来语)上,当我们使用 Safari 查看网页并点击输入字段时,我们会在键盘上显示希伯来语的“下一个/上一个/完成”按钮。 当我们使用应用程序中嵌入的 UIWeb
是否有更好的方法来存储大量文本以在 laravel 中进行本地化?如果我的整个页面只是纯文本,那会很容易,但是我的几个页面具有复杂的布局,我需要添加多个字符串来将文本包裹在图像/链接/媒体等内容周围。
我正在尝试将我的应用程序本地化。我为支持的语言创建了所需的 string.arb 文件。 为什么AppLocalizations.of(context)需要上下文? 我只是想访问文件/语言环境文件/类
绑定(bind)到 double可能会产生以下验证错误 Value ... could not be converted. 使用 ExceptionValidationRule 时错误更健谈: Inp
我有一些 Delphi 经验,并且正在尝试使用 Lazarus 构建一个项目,这对我来说是全新的。 我想,我已经阅读了有关 Lazarus、翻译/国际化/本地化的所有可用信息,但我无法找到我真正想要的
我一直在尝试更新网站的语言。 Controller public function getUpdateLanguage(Request $request) { $request_dat
我正在为我们正在启动的一个项目寻找框架和 CMS,该项目是一个需要支持本地化内容的网站。 Laravel 看起来不错,并且当然允许您本地化 UI 内容,但它似乎本身并不支持存储在数据库中的内容的本地化
我是一名优秀的程序员,十分优秀!