WinForm下如何把dataGridView中的数据导出到Excel中? WinForm下如何把dataGridView中的数据导出到Excel中?开发环境:Visual Studio 2005,使用C#语言。 或者把DataSet中的数据导出到Excel中也可以。俺是新手,刚用VS2005一个星期,请大家帮忙,谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /// <summary> /// 将DataGrid中的数据导入Excel中,并显示Excel应用程序, /// 注意调用该方法必须有安装Excel 2000应用程序,并且假定DataGrid中绑定的是一DataSet /// </summary> /// <param name="grid"></param> /// <param name="ReportTitle"></param> public static void ExportDataGridToExcel(DataGrid grid,string ReportTitle) { DataTable myTable = ((DataSet)grid.DataSource).Tables[0]; try { Excel.Application xlApp = new Excel.ApplicationClass(); int rowIndex; int colIndex; rowIndex = 2; colIndex = 0; Excel.Workbook xlBook =xlApp.Workbooks.Add(true); if (grid.TableStyles.Count >0 ) { Excel.Range range = xlApp.get_Range(xlApp.Cells[1,1],xlApp.Cells[1,grid.TableStyles[0].GridColumnStyles.Count]); range.MergeCells = true; xlApp.ActiveCell.FormulaR1C1 = ReportTitle; xlApp.ActiveCell.Font.Size = 18; xlApp.ActiveCell.Font.Bold = true; foreach(DataGridColumnStyle colu in grid.TableStyles[0].GridColumnStyles) { colIndex=colIndex +1; xlApp.Cells[2,colIndex] = colu.HeaderText ; } //得到的表所有行,赋值给单元格 for (int row = 0;row < myTable.Rows.Count;row++) { rowIndex = rowIndex + 1; colIndex = 0; for (int col=0;col<grid.TableStyles[0].GridColumnStyles.Count;col++) { colIndex = colIndex + 1; xlApp.Cells[rowIndex, colIndex] = grid[row,col].ToString(); } } } else { Excel.Range range = xlApp.get_Range(xlApp.Cells[1,1],xlApp.Cells[1,myTable.Columns.Count]); range.MergeCells = true; xlApp.ActiveCell.FormulaR1C1 = ReportTitle; xlApp.ActiveCell.Font.Size = 18; xlApp.ActiveCell.Font.Bold = true; //将表中的栏位名称填到Excel的第一行 foreach(DataColumn Col in myTable.Columns) { colIndex = colIndex + 1; xlApp.Cells[2, colIndex] = Col.ColumnName; } //得到的表所有行,赋值给单元格 for (int row = 0;row < myTable.Rows.Count;row++) { rowIndex = rowIndex + 1; colIndex = 0; for (int col=0;col<myTable.Columns.Count;col++) { colIndex = colIndex + 1; xlApp.Cells[rowIndex, colIndex] = grid[row,col].ToString(); } } } xlApp.get_Range(xlApp.Cells[2, 1], xlApp.Cells[2, colIndex]).Font.Bold = true; xlApp.get_Range(xlApp.Cells[2, 1], xlApp.Cells[rowIndex, colIndex]).Borders.LineStyle = 1; xlApp.Cells.EntireColumn.AutoFit(); xlApp.Cells.VerticalAlignment = Excel.Constants.xlCenter ; xlApp.Cells.HorizontalAlignment = Excel.Constants.xlCenter ; xlApp.Visible = true; } catch(Exception e) { throw e; } } 在2005中运行要做些小修改,毕竟DATAGRID跟DATAGRIDVIEW的一些操作不同,大体差不多 自动生成编号写法求助 C#中用messagebox.show()如何弹出可以分行的提示 关于ComboBox问题 高难度TreeView问题,请高手帮忙! 关于数据库键表的问题,比较急! vs 2005中,如何触发TreeNodeCheckchanged事件? 怎么检测系统已经安装的某个应用程序(如:office) 谁知道WAP PUSH 消息与我们普通的短信SMS的区别 请问这个怎样用json进行反序列化类? 怎样把上传附件到数据库和读出来啊 为什么不能执行保存? 请帮忙重构一下这段代码
/// 将DataGrid中的数据导入Excel中,并显示Excel应用程序, /// 注意调用该方法必须有安装Excel 2000应用程序,并且假定DataGrid中绑定的是一DataSet
/// </summary>
/// <param name="grid"></param>
/// <param name="ReportTitle"></param>
public static void ExportDataGridToExcel(DataGrid grid,string ReportTitle)
{
DataTable myTable = ((DataSet)grid.DataSource).Tables[0]; try
{
Excel.Application xlApp = new Excel.ApplicationClass(); int rowIndex;
int colIndex; rowIndex = 2;
colIndex = 0; Excel.Workbook xlBook =xlApp.Workbooks.Add(true); if (grid.TableStyles.Count >0 )
{
Excel.Range range = xlApp.get_Range(xlApp.Cells[1,1],xlApp.Cells[1,grid.TableStyles[0].GridColumnStyles.Count]);
range.MergeCells = true;
xlApp.ActiveCell.FormulaR1C1 = ReportTitle;
xlApp.ActiveCell.Font.Size = 18;
xlApp.ActiveCell.Font.Bold = true; foreach(DataGridColumnStyle colu in grid.TableStyles[0].GridColumnStyles)
{
colIndex=colIndex +1;
xlApp.Cells[2,colIndex] = colu.HeaderText ;
} //得到的表所有行,赋值给单元格 for (int row = 0;row < myTable.Rows.Count;row++)
{
rowIndex = rowIndex + 1;
colIndex = 0;
for (int col=0;col<grid.TableStyles[0].GridColumnStyles.Count;col++)
{
colIndex = colIndex + 1;
xlApp.Cells[rowIndex, colIndex] = grid[row,col].ToString();
}
}
}
else
{
Excel.Range range = xlApp.get_Range(xlApp.Cells[1,1],xlApp.Cells[1,myTable.Columns.Count]);
range.MergeCells = true;
xlApp.ActiveCell.FormulaR1C1 = ReportTitle;
xlApp.ActiveCell.Font.Size = 18;
xlApp.ActiveCell.Font.Bold = true;
//将表中的栏位名称填到Excel的第一行 foreach(DataColumn Col in myTable.Columns)
{
colIndex = colIndex + 1;
xlApp.Cells[2, colIndex] = Col.ColumnName;
} //得到的表所有行,赋值给单元格 for (int row = 0;row < myTable.Rows.Count;row++)
{
rowIndex = rowIndex + 1;
colIndex = 0;
for (int col=0;col<myTable.Columns.Count;col++)
{
colIndex = colIndex + 1;
xlApp.Cells[rowIndex, colIndex] = grid[row,col].ToString();
}
}
}
xlApp.get_Range(xlApp.Cells[2, 1], xlApp.Cells[2, colIndex]).Font.Bold = true;
xlApp.get_Range(xlApp.Cells[2, 1], xlApp.Cells[rowIndex, colIndex]).Borders.LineStyle = 1; xlApp.Cells.EntireColumn.AutoFit();
xlApp.Cells.VerticalAlignment = Excel.Constants.xlCenter ;
xlApp.Cells.HorizontalAlignment = Excel.Constants.xlCenter ;
xlApp.Visible = true;
}
catch(Exception e)
{
throw e;
}
}