7
Excel.Worksheet.Cells[row,col] = "=Formula / reference" 

上記のExcelでは数式・参照を更新して結果をデータシートに表示しているのに対し、以下のコードではRange.set_Value(..)データシートを使用すると全く更新されない

string[,] myFormulas = new string[nrRows, nrColumns];
...
myFormulas [x,y] = e.g. "=SUM(D1:D" + rowNr + ")";
myFormulas [x,y+1] = e.g. "=Table1!A1";
...
Range.set_Value(Missing.Value, myFormulas)

数式のみを文字列として表示します=Table1!A1

更新できません。CalucalteAll()も、も、何ももありませんRefreshAll()。データシートを更新する方法について何か提案はありますか?

編集: 1 つのステートメントで配列全体を設定できますRange.set_Value(Missing.Value, myFormulas)。私の質問は、Excel でこの配列の数式を評価する方法です (単純な文字列として扱ったり、Excel が再計算するセルを 1 つずつ設定したりしないでください)。

4

3 に答える 3

13

rangeVariable.Formula = rangeVariable.Value は、「テキストとしての数式」を正真正銘の Excel 数式に変換することがわかりました。これは、その範囲内のすべてのセルに対して行われます。

Worksheet sheetOne = ...
int numberOfRows = 5000;

// Make a massive range on sheet 1, then use cell assignment by array for fastness
Range range = sheetOne.Range["A1"];
string[,] links = new string[numberOfRows+1, 1];
range = range.Resize[numberOfRows+1, 1];

for (int count = 0; count < numberOfRows; count++)
{
    // Build the =HYPERLINK formula to set as text in each cell
    string worksheet = "Sheet2";
    string cellRef = string.Format("A{0}", count + 1);
    string formula = string.Format("=HYPERLINK(\"#{0}!{1}\", \"{2}\")", worksheet, cellRef, string.Format("Hyperlink number {0}", count));

    links[count, 0] = formula;
}

//range.set_Item(Type.Missing, Type.Missing, links);
range.set_Value(Type.Missing, links) // thanks HeinrichStack
range.Formula = range.Value; //<--- Boom baby, all 'formula as text' turns into bona fide excel formula

お役に立てれば

于 2013-05-29T16:52:54.197 に答える
1

I dont think that there is any way to set the Formula value for any given cell, except by deliberately setting the Formula property for it, one cell at a time.

Check out the properties and examples here

so I think what you need to do is something more like this:

Worksheet.Cells[x,y].Formula = "=SUM(D1:D" + rowNr + ")";
Worksheet.Cells[x,y+1].Formula = "=Table1!A1";
于 2013-05-06T14:17:38.093 に答える