将项目添加到多行Excel c#

问题描述:

我有一个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

尝试创建多个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的否 –