2

これは簡単なことかもしれませんが、現時点では私を逃れています。私はいくつかの新しい発見に基づいて質問を言い換えました。

私はExcelアドインで値の2D配列を広範囲に使用して、速度を大幅に向上させています。

拡張メソッドを使用してセル配列を抽出して変更し、値を元に戻します。

例えば:

// Get all cells in the worksheet - this is a formatted table including headings
Range range = worksheet.UsedRange;

// Get all values as a 2D array
object[,] cells = range.GetCellArray();

... // do things to the array 

// Assign the entire array back to worksheet, but table formatting is erased
Range.Value = cells;

テーブルの書式設定は、配列の割り当てによってのみ削除されます。これは、名前付きテーブルListObjectエントリが削除されるまで続きます。

テーブルのフォーマットを維持する方法はありますか?

4

2 に答える 2

1

おそらくもっと良い方法がありますが、私の最初の考えは、配列を一時シートに出力してから、出力をコピーして、[形式を選択して貼り付け]->[値]を目的の範囲にのみ貼り付けることでした。最後に、一時シートを削除します。

于 2012-05-31T17:39:17.850 に答える
1

フォーマットされたテーブルの見出し行のセルを置き換えると、テーブルが完全に失われることがわかります。

解決策は、見出しの下の行のみを置き換えることです。

// Get all cells in the worksheet - this is a formatted table including headings
Range range = worksheet.UsedRange;

// Get all values as a 2D array
object[,] cells = range.GetCellArray();

... // do things to the array 

// Assign the entire array MINUS THE HEADING ROW, back to worksheet
cells = cells.SubArray(2, 1, cells.RowCount() - 1, cells.ColumnCount());
EXCEL.Range targetRange = worksheet.GetRange(1, 2, cells.ColumnCount(), cells.RowCount());
targetRange.Value = cells;

、、、およびメソッドはすべて以前に作成した拡張メソッドですがSubArray、それらの名前と例から、それらが何をするのかがわかります。GetRangeRowCountColumnCount

于 2012-06-04T21:09:07.640 に答える