2011-01-27 54 views
13

好的,所以我試圖用excel interop庫設置單元格的值。我能夠做到以下幾點:使用Excel Interop設置單元值

sheet.Cells[row, col] = value; 

但它是非常緩慢的多少我設置。所以我試圖走這條路:

Range excelRange = sheet.UsedRange; 
excelRange.Cells.set_Item(row, col, value); 

該代碼執行,但沒有數據放在單元格中。對我失蹤的任何建議?謝謝!

+0

我們在談論多少個細胞? – 2011-01-27 00:26:31

+1

「價值」有沒有價值?是正確類型的「價值」,因此它可以適合Cell? – 2011-01-27 00:30:43

回答

19

如果您禁用屏幕更新(Application.ScreenUpdating = false),您的第一種方法應該適用於任何合理(和很多不合理)的細胞數量。 Knowledgebase Article描述如何使用C#訪問按行和列設置單元格。

16

您是否嘗試過一次設置所有值,而不是一次遍歷數組並設置一個單元格?這樣你只需要通過COM邊界傳遞一次數據,而不是每個單元一次。

Excel在這方面非常靈活。請嘗試以下操作:

int[] intArray = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
Range rng = excelApp.get_Range("A1", "J1"); 
rng.Value = intArray; 

您應該比遍歷每個希望設置的單元更快。

除此之外,請按照Andy的建議關閉ScreenUpdated,並考慮將計算設置爲手動,直到完成複製過程。

-5

請嘗試

[excelWorksheet].Cells[1, 1] = "[String you want]"; 
1

簡單的解決方案,但在這裏,你將需要在控制檯的NuGet書面方式安裝包的Microsoft.Office.Interop.Excel

安裝,包裝的Microsoft.Office.Interop.Excel

//test excel file 
    Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); 

     Workbook workbook = excel.Workbooks.Open(System.Windows.Forms.Application.StartupPath + "/TrainedFaces/AttendanceLog.xlsx", ReadOnly: false, Editable: true); 
     Worksheet worksheet = workbook.Worksheets.Item[1] as Worksheet; 
     if (worksheet == null) 
      return; 

     var abc = worksheet.Cells[2, 1].Value; 
     Range row1 = worksheet.Rows.Cells[1, 1]; 
     Range row2 = worksheet.Rows.Cells[2, 1]; 

     row1.Value = "Test100"; 
     row2.Value = "Test200"; 


     excel.Application.ActiveWorkbook.Save(); 
     excel.Application.Quit(); 
     excel.Quit(); 
相關問題