我使用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));
但它将所有公式放在一个字段中(以分号分隔)。有没有办法做我想做的事情,或者我是在浪费时间在一些不可能的事情上?
答案 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处理公式字符串的速度一样快。