2015-09-22 130 views
1

我有一個Windows窗體應用程序。在這個應用程序中,我想將我的一些數據導出到excel中。我已經想出瞭如何創建一個Excel文件,並保存了一些值。但是我不確定的一件事是,是否有一種方法可以使用for循環將項添加到excel行(根據您有多少數據來計算行和列)?因爲如果你想添加一個項目列表,比如1000個項目一個接一個,效率相當低。將項目添加到多行Excel c#

例如:爲了一個項目一次添加特定的細胞之一,我們可以做這樣的事情:

xlSomeDetail.Cells[1,1] = "Teacher Id"; 
xlSomeDetail.Cells[1,2] = "first name"; 
xlSomeDetail.Cells[1,3] = "Last Name"; 
xlSomeDetail.Cells[1,4] = "Email"; 
xlSomeDetail.Cells[1,5] = "Salary"; 

現在是有這樣的事情,如果我想這樣做,而不通過增加行一個一?

//declare aRange variable 
Excel.Range aRange; 

aRange = (Excel.Range)xlSomeDetail.get_Range("A1", "M1"); 

//something like this? I am not sure 
for (int i = 1; i< aRange.Rows; i++{ 

     xlSomeDetail.Cell[1, i+ 1] = //somestring? 
} 

有沒有更好的方法來做到這一點?

+0

如果你把所有的數據爲2維對象數組第一個(對象[,] myData的= new object [rows,cols])嵌套for循環 - 然後可以直接將它分配給Range(aRange.Value2 = myData;) – PaulF

+0

謝謝,我會試試這個。 – RedRocket

回答

0

嘗試創建多個XL對象 befour這個在分割你的數據,按您的需求量的多個數據表

  [DllImport("user32")] 
      private static extern bool GetWindowThreadProcessId(int hWnd, out int id); 


      for(i=0;i<2;i++) 
        { 

        oXL = new Microsoft.Office.Interop.Excel.Application(); 
            oXL.SheetsInNewWorkbook = 1; 
            oXL.Visible = false; 

            //Get a new workbook. 
            oWB = (Excel.Workbook)(oXL.Workbooks.Add(Type.Missing)); 
     oSheet = (Excel.Worksheet)oWB.Worksheets.get_Item(1);+ 
      oSheet.Name = "Summary Report";//Change the name as per your requirment 
          ExcelRowsCount = 2; 
         for (int RowsCount = 0; RowsCount < dt.Rows.Count; RowsCount++) 
           { 
        for (int ColumnsCount = 0; ColumnsCount < dt.Columns.Count; ColumnsCount++) 
            { 
             if (RowsCount.Equals(0) && ColumnsCount.Equals(0)) 
              oSheet.Cells[2, 1] = dt.Rows[RowsCount][ColumnsCount].ToString(); 
             else 
              oSheet.Cells[ExcelRowsCount + RowsCount, ColumnsCount + 1] = dt.Rows[RowsCount][ColumnsCount].ToString(); 
            } 
oXL.Visible = false; 
     oXL.UserControl = false; 
     oXL.DisplayAlerts = false; 
     oXL.ActiveWorkbook.SaveAs(FileName, Excel.XlFileFormat.xlWorkbookNormal, "", "", false, false, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
     oWB.Close(false, Type.Missing, Type.Missing); 
     oXL.Workbooks.Close(); 
     oXL.Quit(); 
      int ExcelID; 
         GetWindowThreadProcessId(oXL.Hwnd, out ExcelID); 
         Process XLProcess = Process.GetProcessById(ExcelID); 
         Marshal.ReleaseComObject(oSheet); 
         Marshal.ReleaseComObject(oWB); 
         Marshal.ReleaseComObject(oXL); 
         XLProcess.Kill(); 
         GC.Collect(); 
         GC.WaitForPendingFinalizers(); 
           } 

       } 
+0

謝謝,我會試試這個。 :) – RedRocket

+0

循環將取決於excel文件genration的否 –