将DataGridView数据导出为ex​​cel

Swe*_*ety 6 c# excel datagridview export

在我的应用程序中,我将DataGridView数据导出到Excel工作表现在我想将组合框和文本框选择的值传递给excel工作表,我必须将我的Excel工作表的标题作为我的Windows应用程序的报告,我该怎么做?

谁可以帮我这个事?

我有将datagridview数据导出到excel的代码:

private void btnexcel_Click(object sender, EventArgs e)    
{

  Excel.Application xlApp;    
  Excel.Workbook xlWorkBook;    
  Excel.Worksheet xlWorkSheet;

  object misValue = System.Reflection.Missing.Value;

  xlApp = new Excel.ApplicationClass();

  xlWorkBook = xlApp.Workbooks.Add(misValue);

  xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

  int i = 0;    
  int j = 0; 

  for (i = 0; i <= dataGridView1.RowCount  - 1; i++)    
  {    
      for (j = 0; j <= dataGridView1.ColumnCount  - 1; j++)    
      {    
         DataGridViewCell cell = dataGridView1[j, i];

         xlWorkSheet.Cells[i + 1, j + 1] = cell.Value;
      }    
  }

  xlWorkBook.SaveAs("csharp.net-informations.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
  xlWorkBook.Close(true, misValue, misValue);

  xlApp.Quit();


  releaseObject(xlWorkSheet);    
  releaseObject(xlWorkBook);    
  releaseObject(xlApp);

  MessageBox.Show("Excel file created , you can find the file c:\\csharp.net-informations.xls");

}


private void releaseObject(object obj)    
{
    try    
    {   
        System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);

        obj = null;    
    }    
    catch (Exception ex)    
    {    
       obj = null;

       MessageBox.Show("Exception Occured while releasing object " + ex.ToString());    
    }    
    finally    
    {    
        GC.Collect();
    }    
}


}
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*all 0

在获取DataGridView单元格信息的代码中,Value 属性为您提供组合框单元格的 ValueMember,而不是组合框中的 DisplayMember。相反,您需要访问 FormattedValue (您实际上可以将其用于所有单元格)。

下面是一些代码,展示了如何执行此操作(以及其他一些小的改进):

for (int i = 0; i < dataGridView1.RowCount; i++)
{
    if (!dataGridView1.Rows[i].IsNewRow)
    {
        for (int j = 0; j < dataGridView1.ColumnCount; j++)
        {        
            DataGridViewCell cell = dataGridView1[j, i];
            MessageBox.Show(cell.FormattedValue.ToString());                    
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在那里,我只是获取 FormattedValue 并将其显示在 MessageBox 中,但对于您来说,您可以简单地将其分配给您的单元格。

我还对循环使用了稍微更紧凑的语法,并添加了对网格 NewRow 的检查(其中可能包含可能会破坏内容的空值)。


另外,需要知道的一件有用的事情是,一旦获得单元格,您就可以获得单元格的实际类型,如下所示:

if (cell is DataGridViewComboBoxCell)
Run Code Online (Sandbox Code Playgroud)

这为您在解决问题时提供了更多选择。作为最后一个选项,您甚至可以访问 EditingControl(ComboBoxColumn 中的实际 DropDown),这又提供了更多选项。

在您的情况下,您不需要这个,但了解它们很有用。