1 public class Export2Excel
2 {
3 #region 【导出文件,使用文件流】
4 /// <summary>
5 /// 导出文件,使用文件流。该方法使用的数据源为DataTable,导出的Excel文件没有具体的样式。
6 /// </summary>
7 /// <param name="dt"></param>
8 public string ExportToExcel(DataTable dt, string path)
9 {
10 KillSpecialExcel();
11 string result = string.Empty;
12 try
13 {
14 // 实例化流对象,以特定的编码向流中写入字符。
15 StreamWriter sw = new StreamWriter(path, false, Encoding.GetEncoding("gb2312"));
16
17 StringBuilder sb = new StringBuilder();
18 for (int k = 0; k < dt.Columns.Count; k++)
19 {
20 // 添加列名称
21 sb.Append(dt.Columns[k].ColumnName.ToString() + "\t");
22 }
23 sb.Append(Environment.NewLine);
24 // 添加行数据
25 for (int i = 0; i < dt.Rows.Count; i++)
26 {
27 DataRow row = dt.Rows[i];
28 for (int j = 0; j < dt.Columns.Count; j++)
29 {
30 // 根据列数追加行数据
31 sb.Append(row[j].ToString() + "\t");
32 }
33 sb.Append(Environment.NewLine);
34 }
35 sw.Write(sb.ToString());
36 sw.Flush();
37 sw.Close();
38 sw.Dispose();
39
40 // 导出成功后打开
41 //System.Diagnostics.Process.Start(path);
42 }
43 catch (Exception)
44 {
45 result = "请保存或关闭可能已打开的Excel文件";
46 }
47 finally
48 {
49 dt.Dispose();
50 }
51 return result;
52 }
53 /// <summary>
54 /// 结束进程
55 /// </summary>
56 private static void KillSpecialExcel()
57 {
58 foreach (System.Diagnostics.Process theProc in System.Diagnostics.Process.GetProcessesByName("EXCEL"))
59 {
60 if (!theProc.HasExited)
61 {
62 bool b = theProc.CloseMainWindow();
63 if (b == false)
64 {
65 theProc.Kill();
66 }
67 theProc.Close();
68 }
69 }
70 }
71 #endregion
72 }