加快xls Formula到Excel-DNA中公式的插入

时间:2012-07-02 13:35:34

标签: excel-dna

我使用Excel-DNA将公式插入大约40k行* 10列,而且速度很慢。

 XlCall.Excel(XlCall.xlcFormula, myFormula, new ExcelReference(row, row, column, column));

我设法通过暂时禁用更新(XlCall.Excel(XlCall.xlcCalculation, 3);)上的单元格重新计算来大大改进它,但理想情况下我想找到一种方法将整个公式列放入excel中的单个操作(I我假设这会提高速度)。

我尝试通过调用xlcFormula传递object[,]

 XlCall.Excel(XlCall.xlcFormula, excelFormulas, new ExcelReference(1, lastRow, columnNumber, columnNumber));

但它将所有公式放在一个字段中(以分号分隔)。有没有办法做我想做的事情,或者我是在浪费时间在一些不可能的事情上?

2 个答案:

答案 0 :(得分:4)

我也有这个麻烦,想出了另一种加速公式插入的方法。 试试这段代码:

var formula = "=1+2";
var reference = new ExcelReference(rowFirst, rowLast, columnFirst, columnLast); // it's а rectangular area, just split up your huge area to smaler ones here
XlCall.Excel(XlCall.xlcFormulaFill, new object[] { formula, reference } ));

当您想要将相同的公式插入到许多单元格中时,此代码很好。 尝试在公式中使用相对引用。

以前的解决方案也有效:

XlCall.Excel(XlCall.xlcEcho, false)

...但不要忘记不时启用回声。

答案 1 :(得分:2)

您可以尝试将屏幕更新关闭XlCall.Excel(XlCall.xlcEcho, false)

使用剪贴板怎么样?您可以将公式(在列之间使用制表符)复制到剪贴板,然后将所有公式一次粘贴到Excel工作表中。这可能与Excel处理公式字符串的速度一样快。