如何从Delphi代码中将一系列不同的公式设置为Excel范围?

TmT*_*ron 6 delphi excel automation vba excel-vba

我尝试设置一系列不同的公式,但它不适用于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
Run Code Online (Sandbox Code Playgroud)

它按预期工作:

在此输入图像描述

笔记:

  • 细胞A1含有单一的配方
  • 单元格A2,B2使用变量数组的字符串进行一次调用
  • 另请注意,Excel安装是德语版,英文公式在屏幕截图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;
Run Code Online (Sandbox Code Playgroud)

但这不能按预期工作:

在此输入图像描述

笔记:

  • 单个公式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;
Run Code Online (Sandbox Code Playgroud)

这也不会立即起作用:

在此输入图像描述

笔记:

  • 公式显示为未知 #Name
  • 但是,当我然后进入每个单元格并再次退出(没有任何更改)数据正确显示(重新计算没有帮助) - 这不是一个大惊喜,就像直接在Excel中输入公式
  • 请注意,当我使用FormulaLocal而不是时,它也不起作用Formula

TmT*_*ron 5

我必须像这样创建varVariant(而不是varOleStr)的变体数组:

VarArrayCreate([0, 1], varVariant);
Run Code Online (Sandbox Code Playgroud)

然后,我所有的用例都包括自动公式翻译工作!

谢谢@Vityata