数据库系统中经常会使用EXCEL,有的时候需要用excel作为数据源,有的时候需要将查询得到的数据用EXCEL来保存出来,总之会不断用到EXCEL…..
首先加载引用:
using Microsoft.Office.Interop.Excel;
using ExcelApplication = Microsoft.Office.Interop.Excel.Application;
注意,假若你先前已经加载using System.Data,那么注意:
不要直接DataTable table这样定义,而应该这样System.Data.DataTable table,或者自己再进行一个转换,因为ExcelApplication 亦有DataTable类,
public static void DoToExcel(System.Data.DataTable table)
{
try
{
ExcelApplication excel = new ExcelApplication();
int rowIndex = 1;
int colIndex = 0;
excel.Application.Workbooks.Add(true);
foreach (DataColumn col in table.Columns)
{
colIndex++;
excel.Cells[1, colIndex] = col.ColumnName;
}
foreach (DataRow row in table.Rows)
{
rowIndex++;
colIndex = 0;
foreach (DataColumn col in table.Columns)
{
colIndex++;
excel.Cells[rowIndex, colIndex] = row[col.ColumnName].ToString();
}
}
excel.Visible = false;
SaveFileDialog sf = new SaveFileDialog();
sf.AddExtension = true;
sf.Filter = "EXCEL 2003(*.xls)|*.xls|所有文件|*.*";
sf.Title = "导出EXCEL 另存为";
if (sf.ShowDialog() == DialogResult.OK)
{
string fileName = sf.FileName;
excel.ActiveWorkbook.SaveAs(fileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel9795, null, null, false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, null, null, null, null, null);
excel.Quit();
excel = null;
GC.Collect();
MessageBox.Show("导出成功!");
}
}
catch(Exception ex)
{
MessageBox.Show("导出失败!");
WriteLogtxt("DoToExcel",ex.Message);
}
}
#endregion
}
上述例子中,直接将参数传来的System.Data.DataTable table 转换为EXCEL,col.ColumnName都将是默认,最好在操作System.Data.DataTable table时进行转换,包括统计行等等……