我尝试设置一系列不同的公式,但是通过Delphi无法使用。
为了说明这一点,我有一些可以直接在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
Complex
用德语KOMPLEXE
显示-sweet 现在,我尝试通过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
的变量数组尚未转换有什么主意我在做错什么以及如何解决这个问题?
我正在使用:
另一种尝试是在Delphi中使用依赖于语言环境的公式:
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
FormulaLocal
而不是Formula
时,它也不起作用答案 0 :(得分:5)
我必须这样创建[Database Name]
Users
- Maria
- Jane
(而不是varVariant
)的变体数组:
varOleStr
然后是我的所有用例,包括自动公式翻译工作!
答案 1 :(得分:1)
在VBA中,.Formula
使用原始的英语公式并将其传输到Excel。然后,基于本地Excel安装,将其“翻译”。因此,=Complex()
在德语中成为=Komplexe()
。
显然在Delphi中,它的工作方式与此类似。 .Formula
可以将您的英语公式正确翻译为德语,因此A1
可以。 VarArrayPut
可能需要Text
而不是Formula
,因此应该使用当地语言:
您可以尝试一下:
VarArrayPut(VarArr, '=Komplexe(0, 0.1)', [0]);
作为最后的选择,如果您可以找到英语的Excel安装,则您的Delphi代码应该可以正常工作。为了获得有关Excel本地公式转换的一些想法,这是如何转换标准=IF()
公式的方式:
"=IF(B1=C1,""Equal"",""Not equal"")"
"=IF(RC[1]=RC[2],""Equal"",""Not equal"")"
"=WENN(B1=C1,""Equal"",""Not equal"")"
"=WENN(ZS(1)=ZS(2),""Equal"",""Not equal"")"