【发布时间】:2017-05-29 03:46:11
【问题描述】:
我一直在使用 COM 接口进行基本的 Excel 自动化,主要是利用 IDispatch::Invoke。
我的测试涉及在新创建的 Excel 文档中添加一个公式。使用设计的包装库,它看起来像这样:
sheet.getObject( "Range", "A1" ).set( "Value", 23 );
sheet.getObject( "Range", "A2" ).set( "Value", 42 );
sheet.getObject( "Range", "A3" ).set( "Formula", "=SUMME(A1:A2)" ); // WTF?
注意:我在这里使用(德语)本地化公式名称 SUMME,而不是预期的标识符 SUM。在 Excel 中对宏记录器执行相同操作时,生成的 VBA 代码包含SUM。在我的 C++ 代码中使用 SUM,我最终会在 Excel 中出现 #NAME? 错误。
Microsoft 的 documentation for the Range.FormulaLocal Property 表示如下:
使用 A1 样式引用返回或设置对象的公式 使用用户的语言。
(我强调了)。
所以我希望使用Formula 而不是FormulaLocal 可以解决这些本地化问题,但显然情况并非如此。
有什么方法可以使用非本地化公式吗?我猜有一些隐藏得很好的设置。
【问题讨论】:
-
是的,它对我有用。我正在使用西班牙语中的 Excel,并且属性公式分配有英文名称并且它可以工作。没有隐藏设置,但我记得它不适用于较旧的 Excel 版本(12 之前,现在很旧)。
-
@CarlosE.Ferro “12”是指 Office 12 又名 Office 2007 吗?我在这里使用 Excel 2010。
-
是的,我告诉过你它已经很老了。 Excel 2007 可以正常工作,所以我不知道为什么它不能在你的上工作。对不起:-(
标签: c++ excel com localization office-automation