将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
单元格信息的代码中,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);
}