将DataGridView数据导出到excel

本文关键字:excel DataGridView 数据 | 更新日期: 2023-09-27 17:59:57

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

有人能帮我吗?

我有导出数据网格视图数据到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数据导出到excel

在获取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());                    
        }
    }
}

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

我还为循环使用了稍微紧凑一点的语法,并添加了对网格的NewRow的检查(它可以包含可能会破坏事物的null值)。


此外,需要知道的一件有用的事情是,一旦你有了细胞,你就可以得到细胞的实际类型,比如:

if (cell is DataGridViewComboBoxCell)

这让你在解决问题时有更多的选择。作为最后一个选项,您甚至可以访问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);
    }