前两天写了一个导出excel的方法:
- protected void AddExcel(DataSet ds,string strName)
- {
- DataTable dt = ds.Tables[0];
- string fileName = strName + ".xls";
- Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
- int rowIndex = 1;
- int colIndex = 0;
- excel.Application.Workbooks.Add(true);
- foreach (DataColumn col in dt.Columns)
- {
- colIndex++;
- excel.Cells[1, colIndex] = col.ColumnName;
- }
- foreach (DataRow row in dt.Rows)
- {
- rowIndex++;
- colIndex = 0;
- for (colIndex = 0; colIndex < dt.Columns.Count; colIndex++)
- {
- excel.Cells[rowIndex, colIndex + 1] = row[colIndex].ToString();
- }
- }
- excel.Visible = false;
- 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.Save(fileName);
- excel.Quit();
- excel = null;
- GC.Collect();//垃圾回收
- }
protected void AddExcel(DataSet ds,string strName)
{
DataTable dt = ds.Tables[0]; string fileName = strName + ".xls"; Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.ApplicationClass(); int rowIndex = 1; int colIndex = 0; excel.Application.Workbooks.Add(true); foreach (DataColumn col in dt.Columns) { colIndex++; excel.Cells[1, colIndex] = col.ColumnName; } foreach (DataRow row in dt.Rows) { rowIndex++; colIndex = 0; for (colIndex = 0; colIndex < dt.Columns.Count; colIndex++) { excel.Cells[rowIndex, colIndex + 1] = row[colIndex].ToString(); } } excel.Visible = false; 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.Save(fileName); excel.Quit(); excel = null; GC.Collect();//垃圾回收 }
,之前没用过这种方式,结果出现以下错误:
类型“Microsoft.Office.Interop.Excel.ApplicationClass”未定义构造函数
无法嵌入互操作类型“Microsoft.Office.Interop.Excel.ApplicationClass”。请改用适用的接口。
解决方法:将引用的DLL:Microsoft.Office.Interop.Excel;的嵌入互操作类型改为false,就可以了。