今天一个下午就整个这一个事情,觉得这个方法很有用,写下来分享一下。
using Microsoft.Office.Interop.Excel;//引用Com
private void To_Excel()
{
Microsoft.Office.Interop.Excel.ApplicationClass MyExcel = new ApplicationClass();
MyExcel.Visible = true;
if (MyExcel == null)
{
MessageBox.Show("EXCEL无法启动!","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
return;
}
Microsoft.Office.Interop.Excel.Workbook wBook = MyExcel.Application.Workbooks.Add(Type.Missing);
Microsoft.Office.Interop.Excel.Worksheet wSheet=(Worksheet)wBook.Worksheets[1];
wSheet.Name = "Excel-" + System.DateTime.Now.ToLongDateString();
int rowCount = 0;
int columnCount = 0;
columnCount = this.dataGridView_Info.ColumnCount;
rowCount = this.dataGridView_Info.RowCount;
rowCount--;
for (int i =0; i < columnCount; i++)
{
wSheet.Cells[1, i+1] = this.dataGridView_Info.Columns[i].HeaderText;//Cell[1,i+1]对于excel表,是从[1,1]开始的,因此此处必须加1,否则会报出COMException错误!
}
for (int i = 0; i <=rowCount; i++)//此处必须加=号,否则导出的数据少最后一行
{
for (int j = 1; j < columnCount; j++)
{
wSheet.Cells[i + 2, j] = "'"+this.dataGridView_Info[j-1, i].Value.ToString();//i+2表示excel表中列名是i+1,数据从i+2开始,但是从datagridview获取数据是必须从j-1开始,否则datagridview中的第一列数据在excel中看不到,excel显示的数据就会从datagridview的第二列数据开始。
}
}
MessageBox.Show("数据导出完毕,请保存!");
}
datagridview导出到Excel中的数据太长,经常会成为科学计数法,那么在生成Excel每个单元格数据的时候就加一个单引号"'",wSheet.Cells[i + 2, j] = "'"+this.dataGridView_Info[j-1, i].Value.ToString();这个问题便迎刃而解。