C#datagrid生成Excel文件
先项目\添加引用\COM
Microsoft Office xx.x Object Library
再:
不能写using Excel;要写成using Microsoft.Office.Interop.Excel;
导出当前页 数据到Excel
DataGridView命名为dataGridView1
#region 导出当前页到Excel中
//按下导出按钮
private void button7_Click( object sender, EventArgs e)
{
print(dataGridView1);
}
public void print(DataGridView dataGridView1)
{
//导出到execl
try
{
//没有数据的话就不往下执行
if (dataGridView1.Rows.Count == 0)
return ;
//实例化一个Excel.Application对象
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
//让后台执行设置为不可见,为true的话会看到打开一个Excel,然后数据在往里写
excel.Visible = false ;
//新增加一个工作簿,Workbook是直接保存,不会弹出保存对话框,加上Application会弹出保存对话框,值为false会报错
excel.Application.Workbooks.Add(true );
//生成Excel中列头名称
for ( int i = 0; i < dataGridView1.Columns.Count; i++)
{
excel.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;
}
//把DataGridView当前页的数据保存在Excel中
for ( int i = 0; i < dataGridView1.Rows.Count – 1; i++)
{
for ( int j = 0; j < dataGridView1.Columns.Count; j++)
{
if (dataGridView1[j, i].ValueType == typeof ( string ))
{
excel.Cells[i + 2, j + 1] = “‘” + dataGridView1[j, i].Value.ToString();
}
else
{
excel.Cells[i + 2, j + 1] = dataGridView1[j, i].Value.ToString();
}
}
}
//设置禁止弹出保存和覆盖的询问提示框
excel.DisplayAlerts = false ;
excel.AlertBeforeOverwriting = false ;
//保存工作簿
excel.Application.Workbooks.Add(true ).Save();
//保存excel文件
excel.Save(“D:” + “\\KKHMD.xls” );
//确保Excel进程关闭
excel.Quit();
excel = null ;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, “错误提示” );
}
}
#endregion
导出从数据库中查询到的所有的数据 到Excel中
#region 导出全部数据到Excel中,可弹出保存对话框,但没用SaveFileDialog
public void printAll(System.Data.DataTable dt)
{
//导出到execl
try
{
//没有数据的话就不往下执行
if (dt.Rows.Count == 0)
return ;
//实例化一个Excel.Application对象
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
//新增加一个工作簿,Workbook是直接保存,不会弹出保存对话框,加上Application会弹出保存对话框,值为false会报错
excel.Application.Workbooks.Add(true );
//让后台执行设置为不可见,为true的话会看到打开一个Excel,然后数据在往里写
excel.Visible = false ;
//生成Excel中列头名称
for ( int i = 0; i < dt.Columns.Count; i++)
{
excel.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;//输出DataGridView列头名
}
//把DataGridView当前页的数据保存在Excel中
if (dt.Rows.Count > 0)
{
for ( int i = 0; i < dt.Rows.Count; i++) //控制Excel中行,上下的距离,就是可以到Excel最下的行数,比数据长了报错,比数据短了会显示不完
{
for ( int j = 0; j < dt.Columns.Count; j++) //控制Excel中列,左右的距离,就是可以到Excel最右的列数,比数据长了报错,比数据短了会显示不完
{
string str = dt.Rows[i][j].ToString();
excel.Cells[i + 2, j + 1] = “‘” + str; //i控制行,从Excel中第2行开始输出第一行数据,j控制列,从Excel中第1列输出第1列数据,”‘” +是以string形式保存,所以遇到数字不会转成16进制
}
}
}
//设置禁止弹出保存和覆盖的询问提示框
excel.DisplayAlerts = false ;
excel.AlertBeforeOverwriting = false ;
//保存工作簿,值为false会报错
excel.Application.Workbooks.Add(true ).Save();
//保存excel文件
excel.Save(“D:” + “\\KKHMD.xls” );
//确保Excel进程关闭
excel.Quit();
excel = null ;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, “错误提示” );
}
}
private void button1_Click( object sender, EventArgs e)
{
printAll(dt);
}
#endregion