加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

C#WinForm 使用StreamWriter导出数据成Excel文件。

发布时间:2021-05-20 14:33:33 所属栏目:大数据 来源: https://blog.csdn.net/kasama1
导读:2013-12-19 14:01 ? 7433人阅读 ? 评论(1) ? 收藏 ? 举报 ? 分类: .net(6)? 版权声明:本文为博主原创文章,未经博主允许不得转载。 1:导出数据为Excel文件在开发项目时比较常见的一种需求 。以前对于数据量较小的情况使用?Microsoft.Office.Interop.Exc

? 7433人阅读? 评论(1)? 收藏? 举报

? 分类: 1:导出数据为Excel文件在开发项目时比较常见的一种需求 。以前对于数据量较小的情况使用?Microsoft.Office.Interop.Excel.Workbooks相关类,编写起来也比较麻烦,对于数据量较大的情况,在此与大家共享使用SteamWriter类输出Excel文件的方法。经过具体测试,通过在程序中使用多线程配置该方法,导出300000行+17列的约130M的数据需要31秒左右。 [csharp]? view plain ?copy ?print ? @H_403_45@

在CODE上查看代码片

@H_403_45@

派生到我的代码片

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

B/S 导出:

copy ??
    //?保存错误信息??
  1. ????????????????????????GridView?gv?=?new?GridView();??
  2. ????????????????????????gv.DataSource?=?dtError;??
  3. ????????????????????????gv.DataBind();??
  4. ????????????????????????gv.Attributes.Add("style",?"vnd.ms-excel.numberformat:@");??
  5. ????????????????????????HttpResponse?hResponse?=?this.Response;??
  6. ????????????????????????string?fileName1?=?"新员工格式验证错误统计"?+?DateTime.Now.ToString("yyyyMMdd");??
  7. ????????????????????????hResponse.AddHeader("Content-Disposition",?"attachment;?filename="?+?HttpUtility.UrlEncode(fileName1,?System.Text.Encoding.UTF8)?+?".xls");??
  8. ????????????????????????hResponse.ContentEncoding?=?System.Text.Encoding.GetEncoding("gb2312");??
  9. ????????????????????????hResponse.ContentType?=?"application/ms-excel";??
  10. ????????????????????????this.EnableViewState?=?false;??
  11. ????????????????????????StringWriter?tw?=?new?StringWriter();??
  12. ????????????????????????System.Web.UI.HtmlTextWriter?hw?=?new?System.Web.UI.HtmlTextWriter(tw);??
  13. ????????????????????????gv.RenderControl(hw);??
  14. ????????????????????????hResponse.Write(tw);??
  15. ????????????????????????hResponse.End();??

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读