用来记录一下。老是忘记,这个是比较稳定的方法:)
private
void
SaveExcel(DataGridView dataGridView1,
string
filename)
{
if (dataGridView1.Rows.Count == 0 )
return ;
Microsoft.Office.Interop.Excel.ApplicationClass _x =
{
if (dataGridView1.Rows.Count == 0 )
return ;
Microsoft.Office.Interop.Excel.ApplicationClass _x =
new
Microsoft.Office.Interop.Excel.ApplicationClass();
_x.UserControl = false ;
Microsoft.Office.Interop.Excel.WorkbookClass wb =
_x.UserControl = false ;
Microsoft.Office.Interop.Excel.WorkbookClass wb =
(Microsoft.Office.Interop.Excel.WorkbookClass)
this
._x.Workbooks.Add(System.Reflection.Missing.Value);
// 生成表头
for ( int i = 0 ; i < dataGridView1.ColumnCount; i ++ )
{
_x.Cells[ 1 , i + 1 ] = dataGridView1.Columns[i].HeaderText;
}
// 填充数据
for ( int i = 0 ; i < dataGridView1.RowCount - 1 ; i ++ )
{
for ( int j = 0 ; j < dataGridView1.ColumnCount; j ++ )
{
if (dataGridView1[j, i].ValueType == typeof ( string ))
{
_x.Cells[i + 2 , j + 1 ] = " ' " + dataGridView1[j, i].Value.ToString();
}
else
{
_x.Cells[i + 2 , j + 1 ] = dataGridView1[j, i].Value.ToString();
}
}
}
wb.Saved = true ;
this ._x.ActiveWorkbook.SaveCopyAs(filename);
this ._x.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(( object )_x);
System.GC.Collect();
}
// 生成表头
for ( int i = 0 ; i < dataGridView1.ColumnCount; i ++ )
{
_x.Cells[ 1 , i + 1 ] = dataGridView1.Columns[i].HeaderText;
}
// 填充数据
for ( int i = 0 ; i < dataGridView1.RowCount - 1 ; i ++ )
{
for ( int j = 0 ; j < dataGridView1.ColumnCount; j ++ )
{
if (dataGridView1[j, i].ValueType == typeof ( string ))
{
_x.Cells[i + 2 , j + 1 ] = " ' " + dataGridView1[j, i].Value.ToString();
}
else
{
_x.Cells[i + 2 , j + 1 ] = dataGridView1[j, i].Value.ToString();
}
}
}
wb.Saved = true ;
this ._x.ActiveWorkbook.SaveCopyAs(filename);
this ._x.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(( object )_x);
System.GC.Collect();
}