2017-09-13 62 views
0

其導出標題ok,但沒有任何行正在導出。目前有2列,只有2行試圖導出。將datagrid導出爲ex​​cel標題但不包含行

我想我的循環中有問題,但我沒有看到它。

尋找一雙清新的眼睛。

private void btnExport_Click(object sender, EventArgs e) 
    { 
     // Creating a Excel object. 
     Microsoft.Office.Interop.Excel._Application excel = new Microsoft.Office.Interop.Excel.Application(); 
     Microsoft.Office.Interop.Excel._Workbook workbook = excel.Workbooks.Add(Type.Missing); 
     Microsoft.Office.Interop.Excel._Worksheet worksheet = null; 

     try 
     { 
      worksheet = workbook.ActiveSheet; 
      worksheet.Name = "ExportedFromDatGrid"; 

      int cellRowIndex = 1; 
      int cellColumnIndex = 1; 

      //Loop through each row and read value from each column. 
      for (int i = 0; i < DGV.Rows.Count; i++) 
      { 
       for (int j = 0; j < DGV.Columns.Count; j++) 
       { 
        if (cellRowIndex == 1) 
        { 
         worksheet.Cells[cellRowIndex, cellColumnIndex] = DGV.Columns[j].HeaderText; 
        } 
        else 
        { 
         worksheet.Cells[cellRowIndex, cellColumnIndex] = DGV.Rows[i].Cells[j].Value.ToString(); 
        } 
        cellColumnIndex++; 
       } 
       cellColumnIndex = 1; 
       cellRowIndex++; 
      } 

      SaveFileDialog saveDialog = new SaveFileDialog(); 
      saveDialog.Filter = "Excel files (*.xlsx)|*.xlsx|All files (*.*)|*.*"; 
      saveDialog.FilterIndex = 2; 

      if (saveDialog.ShowDialog() == DialogResult.OK) 
      { 
       workbook.SaveAs(saveDialog.FileName); 
       MessageBox.Show("Export Successful"); 
      } 
     } 
     catch (System.Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
     finally 
     { 
      excel.Quit(); 
      workbook = null; 
      excel = null; 
     } 
    } 
+0

好最新的編輯,現在抓住在DataGrid但是DataGrid的第一行被跳過頭和最後一排。 – Logan

+0

現在,如果我設置了'if(cellRowIndex == 0)'而不是1,它當然不會給我這些標題,但它確實給了我在數據網格中填充的兩行。但由於某種原因,如果我抓住標題,那麼我只能得到數據網格的最後一行。 – Logan

+0

有什麼建議嗎? – Logan

回答

0

您想爲列一個單獨的循環:

 for (int j = 0; j < DGV.Columns.Count; j++) 
     { 

      worksheet.Cells[cellRowIndex, cellColumnIndex] = DGV.Columns[j].HeaderText; 
      cellColumnIndex++; 
     } 
     cellRowIndex++; 

     //Loop through each row and read value from each column. 
     for (int i = 0; i < DGV.Rows.Count; i++) 
     { 
      for (int j = 0; j < DGV.Columns.Count; j++) 
      { 
       worksheet.Cells[cellRowIndex, cellColumnIndex] = DGV.Rows[i].Cells[j].Value.ToString(); 
       cellColumnIndex++; 
      } 
      cellColumnIndex = 1; 
      cellRowIndex++; 
     }