通过StreamWriter将Datatable导出为Excel文件
代码
/// <summary>
/// 导出文件,使用文件流。该方法使用的数据源为DataTable,导出的Excel文件没有具体的样式。
/// </summary>
/// <param name="dt"></param>
public static string ExportToExcel(System.Data.DataTable dt, string path)
{
KillSpecialExcel();
string result = string.Empty;
try
{
// 实例化流对象,以特定的编码向流中写入字符,该步骤会创建一个没有数据的excel文件
StreamWriter sw = new StreamWriter(path, false, Encoding.GetEncoding("gb2312"));
StringBuilder sb = new StringBuilder();
for (int k = 0; k < dt.Columns.Count; k++)
{
// 添加列名称
sb.Append(dt.Columns[k].ColumnName.ToString() + "\t");
}
sb.Append(Environment.NewLine);
// 添加行数据
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow row = dt.Rows[i];
for (int j = 0; j < dt.Columns.Count; j++)
{
// 根据列数追加行数据
sb.Append(row[j].ToString() + "\t");
}
sb.Append(Environment.NewLine);
}
sw.Write(sb.ToString());//将datatable内容写入文件中。
sw.Flush();
sw.Close();
sw.Dispose();
// 导出成功后打开
//System.Diagnostics.Process.Start(path);
}
catch (Exception)
{
result = "请保存或关闭可能已打开的Excel文件";
}
finally
{
dt.Dispose();
}
return result;
}
/// <summary>
/// 结束进程
/// </summary>
private static void KillSpecialExcel()
{
foreach (System.Diagnostics.Process theProc in System.Diagnostics.Process.GetProcessesByName("EXCEL"))
{
if (!theProc.HasExited)
{
bool b = theProc.CloseMainWindow();
if (b == false)
{
theProc.Kill();
}
theProc.Close();
}
}
}
但是以上代码并不十分适用我的项目,于是我做了些许修改以适用我的项目;在将datatable写入文件之前,判断数据是否为空。
修改后的代码
public static string ExportToExcel(DataTable dt, string path)
{
KillSpecialExcel();
string result = string.Empty;
try
{
StringBuilder sb = new StringBuilder();
for (int k = 0; k < dt.Columns.Count; k++)
{
// 添加列名称
sb.Append(dt.Columns[k].ColumnName.ToString() + "\t");
}
sb.Append(Environment.NewLine);
// 添加行数据
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow row = dt.Rows[i];
for (int j = 0; j < dt.Columns.Count; j++)
{
// 根据列数追加行数据
sb.Append(row[j].ToString() + "\t");
}
sb.Append(Environment.NewLine);
}
//写入前检测datatable是否为空,若为空,则不写入文件
if (dt.Rows.Count > 0)
{
// 实例化流对象,以特定的编码向流中写入字符。
StreamWriter sw = new StreamWriter(path, false, Encoding.GetEncoding("gb2312"));
//写入文件操作
sw.Write(sb.ToString());
sw.Flush();
sw.Close();
sw.Dispose();
MessageBox.Show("导出数据成功,路径:"+path,"提示");//导出成功,提示用户并告知路径。
}
else
{
MessageBox.Show("导出数据为空","提示");
}
// 导出成功后打开
//System.Diagnostics.Process.Start(path);
}
catch (Exception)
{
result = "请保存或关闭可能已打开的Excel文件";
}
finally
{
dt.Dispose();
}
return result;
}