将DataGridView数据导出为ex​​cel

在我的应用程序我出口DataGridView数据Excel工作performance在我想通过combobox和文本框选定值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(); } } } } 

在获取DataGridView单元格信息的代码中,Value属性为您提供了ComboBox单元格的ValueMember,而不是ComboBox中的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()); } } } 

在那里,我只是把FormattedValue和显示一个MessageBox,但你可以简单地把它分配给你的单元格。

我还使用了一个稍微更紧凑的循环语法,并添加在网格的NewRow(可以包含空值,这可能会破坏的东西)的检查。


另外,要知道的一个有用的事情是,一旦你有了这个单元格,你可以得到这个单元格的实际types,如下所示:

 if (cell is DataGridViewComboBoxCell) 

这就给了你更多的select来解决问题。 作为最后一个选项,您甚至可以访问EditingControl(ComboBoxColumn中实际的DropDown),同样这也提供了更多选项。

你不应该需要这个,但是他们知道的很有用。

  private void ExportarDataGridViewExcel(DataGridView grd) { SaveFileDialog fichero = new SaveFileDialog(); fichero.Filter = "Excel (*.xls)|*.xls"; fichero.FileName = "export.xls"; if (fichero.ShowDialog() == DialogResult.OK) { Microsoft.Office.Interop.Excel.Application aplicacion; Microsoft.Office.Interop.Excel.Workbook libros_trabajo; Microsoft.Office.Interop.Excel.Worksheet hoja_trabajo; aplicacion = new Microsoft.Office.Interop.Excel.Application(); libros_trabajo = aplicacion.Workbooks.Add(); hoja_trabajo = (Microsoft.Office.Interop.Excel.Worksheet)libros_trabajo.Worksheets.get_Item(1); // changing the name of active sheet hoja_trabajo.Name = "Exported from App"; // storing header part in Excel for (int i = 1; i < grd.Columns.Count + 1; i++) { hoja_trabajo.Cells[1, i] = grd.Columns[i - 1].HeaderText; } //Recorremos el DataGridView rellenando la hoja de trabajo for (int i = 1; i < grd.Rows.Count + 1; i++) { for (int j = 0; j < grd.Columns.Count; j++) { hoja_trabajo.Cells[i + 1, j + 1] = grd.Rows[i-1].Cells[j].Value.ToString(); } } libros_trabajo.SaveAs(fichero.FileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal); libros_trabajo.Close(true); aplicacion.Quit(); } } //in the click event of button1 private void button1_Click(object sender, EventArgs e) { ExportarDataGridViewExcel(dataGridView1); }