1

私が書いた Excel アドインで少し悪夢に見舞われました。顧客のワークブックは SQL 接続から作成されていましたが、名前付きテーブルなどに多数の数式が設定されていました。WCF サービスからのデータを使用して (既存のヘッダーとフッターを使用して) 接続が作成されたのと同じテーブルをいくつか作成しようとしています。フォーマットと数式を維持しながら (つまり、何も壊さない)。

データの取り込みは問題ありません。私が直面している問題は次のとおりです。置き換えられるデータは、名前付き範囲に現在存在するデータよりも多かれ少なかれデータである可能性があります。既存の行を削除して新しいデータに置き換え、名前付き範囲を新しいデータにサイズ変更する方法が見つからないようです。

よろしくお願いします。

Range range = activeWorksheet.get_Range("Name", MissingValue);
range.Clear();
object[,] data = new object[result.Length, 26];
range.get_Resize(result.Length, 26);
... fill data....
range.Value2 = data;   
4

2 に答える 2

1

わかりました、以下のコードでそれを解決することができました。また、フォーマットの削除を停止する「range.Clear()」呼び出しを削除しました。

 Range range = activeWorksheet.get_Range("Name", MissingValue);
 int totalMissingRows = 0;
            if (range.Rows.Count < result.Length)
            {
                totalMissingRows = result.Length - range.Rows.Count;
                for (int i = 0, l = totalMissingRows; i < l; i++)
                {

                    Excel.Range rng = range;
                    rng = (Excel.Range)rng.Cells[rng.Rows.Count, 1];
                    rng = rng.EntireRow;
                    rng.Insert(Excel.XlInsertShiftDirection.xlShiftDown, MissingValue);
                }
            }

            //delete extra lines
            //remove left over data
            for (int i = result.Length, l = range.Rows.Count; i < l; i++) { range.Cells[range.Rows.Count, 1].EntireRow.Delete(null); }
于 2012-10-02T13:53:36.040 に答える
0

すでにデータの配列を取得しているため、次のように直接 Excel に書き込んでみませんか。
int startRow, startCol;
var startCell = (Range)worksheet.Cells[startRow, startCol];
var endCell = (Range)worksheet.Cells[startRow + result.Length, startCol + 26];
var writeRange = worksheet.get_Range(startCell, endCell);
writeRange.Value2 = data;

ここでは、質問に従って配列の長さを使用しました。データはデータの2次元配列です。

于 2012-10-04T10:53:16.577 に答える