网上这个的资料好多都有点问题,我也是从网上找的,然后自己改完后才成功的。 (在此不记名感谢无私发布资源的n位童鞋)
希望看了我的文章的童鞋可以自行测试下Microsoft.Office.Interop.Excel.Application 下的SaveAs 和SaveCopyAs的区别。
另外这个程序需要添加 Microsoft.Office.Interop.Excel 的 引用。 并且操作完后一定注意释放资源,否则你创建的excel会一直被占用。 只能从任务管理器中关掉相关线程才行。
好了,上代码:
/// <summary>
/// 根据dataset创建excel
/// </summary>
/// <param name="ds">要导出的DataSet</param>
/// <param name="strExcelFileName">要导出的文件名(详细路径加文件名)</param>
public string CreateExcelByDataSet(DataSet ds, string strExcelFileName)
{
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
if (excel == null)
{
return "无法启动Excel,可能您的电脑未安装Excel";
}
try
{
int rowIndex = 1;
int colIndex = 0;
excel.Application.Workbooks.Add(true);
System.Data.DataTable table = ds.Tables[0];
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;
excel.DisplayAlerts = false;
System.Reflection.Missing miss = System.Reflection.Missing.Value;
excel.ActiveWorkbook.SaveAs(strExcelFileName, miss, miss, miss, miss, miss, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss, miss, miss); ;
excel.Quit();
return "数据导出成功!";
}
catch (Exception ex)
{
return "出现异常!\r\n"+ex.Message;
}
finally
{
GC.Collect();//垃圾回收
}
}
/// <summary>
/// 根据封装的datatable创建excel
/// </summary>
/// <param name="tmpDataTable"></param>
/// <param name="strFileName"></param>
public string CreateExcelByDataTable(DataTable tmpDataTable, string strFileName)
{
if (tmpDataTable == null)
return "待写数据为空!请检查。";
int rowNum = tmpDataTable.Rows.Count;
int columnNum = tmpDataTable.Columns.Count;
int rowIndex = 1;
int columnIndex = 0;
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
xlApp.DefaultFilePath = "";
xlApp.DisplayAlerts = true;
xlApp.SheetsInNewWorkbook = 1;
Microsoft.Office.Interop.Excel.Workbook xlBook = xlApp.Workbooks.Add(true);
//将DataTable的列名导入Excel表第一行
foreach (DataColumn dc in tmpDataTable.Columns)
{
columnIndex++;
xlApp.Cells[rowIndex, columnIndex] = dc.ColumnName;
}
//将DataTable中的数据导入Excel中
for (int i = 0; i < rowNum; i++)
{
rowIndex++;
columnIndex = 0;
for (int j = 0; j < columnNum; j++)
{
columnIndex++;
xlApp.Cells[rowIndex, columnIndex] = tmpDataTable.Rows[i][j].ToString();
}
}
System.Reflection.Missing miss = System.Reflection.Missing.Value;
xlBook.SaveAs(strFileName, miss, miss, miss, miss, miss, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss, miss, miss);
xlBook.Close(false, miss, miss);
xlApp.Quit();
GC.Collect();
return "Success!";
}