2012-10-02 38 views
1

我已經寫了一個Excel加載項,我有一點噩夢。客戶工作簿過去是從SQL連接填充,並有大量的公式設置周圍命名錶等。我試圖填充一些相同的表連接填充(使用現有的頁眉和頁腳)的數據從WCF服務同時保持格式和公式(即:不打破任何東西)。用插件替換Excel連接範圍

獲取數據很好。我遇到的問題是這樣的:被替換的數據可能比當前存在於指定範圍內的數據更多或更少。我似乎無法找到一種方法去除出現的行並用我的新數據替換它們,並將指定的範圍調整爲新數據。

非常感謝提前。

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; 
+0

您可以舉例說明您正在使用的數據,並瞭解電子表格的外觀? – JMK

+0

不幸的是,實際的數據是敏感的,但問題不在於數據。它歸結爲清除命名範圍並填充它,並確保命名範圍是適合新數據的正確大小。 – BigBadOwl

回答

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); } 
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;

在這裏,我用你的數組的長度爲根據你的問題和數據是二維數組數據。