【发布时间】:2018-12-27 09:28:24
【问题描述】:
我尝试设置一系列不同的公式,但它在 Delphi 中不起作用。
VBA 测试代码
为了说明这一点,我有一些可以直接在 Excel 中执行的 VBA 测试代码:
Public Sub Test()
Range(Cells(1, 1), Cells(1, 1)).Formula = "=Complex(1, 1.2)"
Dim vFormula(1 To 2) As Variant
vFormula(1) = "=Complex(0, 0.1)"
vFormula(2) = "=Complex(1, 1.2)"
Range(Cells(2, 1), Cells(2, 2)).Formula = vFormula
End Sub
它按预期工作:
注意事项:
- 单元格
A1包含一个公式 - 单元格
A2、B2已使用变体字符串数组通过一次调用设置 - 另请注意,Excel 安装是德文的,而英文公式
Complex在屏幕截图中显示为德文KOMPLEXE- 很好
德尔福测试代码
现在我尝试通过 Delphi 做同样的事情:
procedure TForm1.btnAddRangeFormulasClick(Sender: TObject);
var
I: Integer;
VarArr: Variant;
begin
FWorksheet.Range['A1', 'A1'].Formula := '=Complex(1, 1.2)';
VarArr := VarArrayCreate([0, 1], varOleStr);
VarArrayPut(VarArr, '=Complex(0, 0.1)', [0]);
VarArrayPut(VarArr, '=Complex(1, 1.2)', [1]);
FWorksheet.Range['A2', 'B2'].Formula := VarArr;
end;
但这并没有按预期工作:
注意事项:
-
A1中的单个公式按预期工作 - 但是我设置为
A2、B2的变量数组还没有转换
任何想法我做错了什么以及如何解决这个问题?
我正在使用:
- Windows 10 Pro 64 位英语语言环境
- Excel 2007 德语
- 德尔福10.2
- Excel TLB:Microsoft Excel 15.0 对象库
更新
另一种尝试是在 Delphi 中使用 Locale 依赖公式:
procedure TForm1.btnAddRangeFormulasGerClick(Sender: TObject);
var
VarArr: Variant;
begin
FWorksheet.Range['A1', 'A1'].Formula := '=Komplexe(1, 1.2)';
VarArr := VarArrayCreate([0, 1], varOleStr);
VarArrayPut(VarArr, '=Komplexe(0, 0.1)', [0]);
VarArrayPut(VarArr, '=Komplexe(1, 1.2)', [1]);
FWorksheet.Range['A2', 'B2'].Formula := VarArr;
end;
这也不能立即工作:
注意事项:
- 公式显示为未知
#Name - 但是当我输入每个单元格并再次退出时(不做任何更改),数据会正确显示(重新计算没有帮助) - 这并不奇怪,就像直接在 Excel 中输入公式一样
- 注意,当我使用
FormulaLocal而不是Formula时它也不起作用
【问题讨论】:
-
正确使用 Excel 2007 - 德语版会很有帮助,因为这真的很重要。
标签: vba excel delphi automation