首页 文章

将DataGridView数据导出为excel

提问于
浏览
6

在我的应用程序中,我将DataGridView数据导出到Excel工作表现在我想将组合框和文本框选择的值传递给excel工作表,我必须将我的Excel工作表的 Headers 作为我的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

    在您获取 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),这又提供了更多选项 .

    在你的情况下你不应该需要它,但它们对于了解它们是有用的 .

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

相关问题