个人总结了几种常用DataTableToExcel的实现方式:
1.StreamWriter写入:缺点,数据类型只能为整数型如:007显示为7;优点,适合大量数据,速度快。
2.Microsoft.Office.Interop.Excel.dll:缺点,需要安装office,对于一些服务器来说有一定的局限性;优点,可满足大部分样式设置。
3.NOPI:这是我个人比较推荐的一种方式,他没有任何版权的限制,读取速度较快,适合多个版本的office。
说了这么多,接下来进入正题,现在对各种方式导入到excel进行一下对比
1.直接通过流写入(基本靠拼接)
/// <summary>
/// 将数据保存到文件(格式可以是.xls,.txt等;)
/// 缺点:数据类型只能为整数型如:007显示为7
/// 优点:适合大量数据,速度快
/// </summary>
/// <param name="table">DataTable</param>
/// <param name="titles">行标题(按从左到右排列)</param>
/// <param name="file">要保存的文件路径</param>
public static void DataTableToExcel(DataTable table, string[] titles, string file)
{
string title = "";
FileStream fs = new FileStream(file, FileMode.OpenOrCreate);
StreamWriter sw = new StreamWriter(new BufferedStream(fs), System.Text.Encoding.Default);
//拼接表头
for (int i = 0; i < table.Columns.Count; i++)
{
title += titles[i] + "\t";//自动跳到下一单元格
}
title = title.Substring(0, title.Length - 1) + "\n";
sw.Write(title);
foreach (DataRow row in table.Rows)
{
string line = "";
for (int i = 0; i < table.Columns.Count; i++)
{
//line += row[i].ToString().Trim() + "\t"; //内容:自动跳到下一单元格
line += row[i].ToString().Trim() + "\t";//自动跳到下一单元格
}
line = line.Substring(0, line.Length - 1) + "\n";
sw.Write(line);
}
sw.Close();
fs.Close();
}
2.Microsoft.Office.Interop.Excel.dll
/// <summary>
/// 将datatable保存至excel
/// Microsoft.Office.Interop.Excel
/// </summary>
/// <param name="srcDataTable">数据源</param>
/// <param name="arryTitle">excel列标题</param>
/// <param name="excelFilePath">要保存的路径</param>