将DataGridView数据导出为ex​​cel

时间:2011-06-23 04:09:43

标签: 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();
    }    
}


}
}

2 个答案:

答案 0 :(得分:0)

在您获取DataGridView单元格信息的代码中,Value属性为comboBox单元格而不是comboBox中的DisplayMember提供ValueMember。相反,您需要访问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(它可以包含可能破坏事物的空值)。


另外,要知道的一件有用的事情是,一旦你拥有了单元格,就可以获得单元格的实际类型:

if (cell is DataGridViewComboBoxCell)

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

在你的情况下你不应该这样做,但是它们对于了解它们是有用的。

答案 1 :(得分:0)

    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);
    }