1

Excel-DNA を使用して数式を約 40k 行 * 10 列に挿入していますが、かなり遅いです。

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

更新時にセルの再計算を一時的に無効にすることで劇的に改善することができました(XlCall.Excel(XlCall.xlcCalculation, 3);)が、理想的には、数式の列全体を1回の操作でExcelに入れる方法を見つけたいと思います(これにより速度が向上すると想定しています) .

object[,]xlcFormula への呼び出しで を渡そうとしました:

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

ただし、すべての数式を 1 つのフィールド (セミコロンで区切って) に入れます。私がやろうとしていることを行う方法はありますか、それとも不可能なことに時間を浪費していますか?

4

2 に答える 2

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)

...しかし、時々エコーを有効にすることを忘れないでください。

于 2013-03-26T19:55:51.413 に答える
2

画面の更新もオフにして試すことができますXlCall.Excel(XlCall.xlcEcho, false)

クリップボードの使用はどうですか? 数式を (列の間にタブを付けて) クリップボードにコピーし、一度にすべてを Excel シートに貼り付けることができます。これはおそらく、Excel で数式文字列を処理するのと同じくらい高速です。

于 2012-07-02T18:50:25.287 に答える