导出到Excel,基本是很多单据的标配功能了。笔者之前将Datagridview的数据导出到Excel时,将数据一个单元格一个单元格的写入,效率奇慢,

1030条数据花费了将近70s的时间。后来借鉴了前辈们的其它写法,将数据先生成到string变量,再写入,效率提升了150多倍。分享如下:

1、改善后结果:

2、导出到Excel使用的方法:

简要说明:

TableName:数据源数据表

FileName:要保存的Excel文件名

lblStatus:ToolStripStatusLable

barStatus:ToolStripProgressBar

引用及代码:

  1. using System.IO;
  2. using System.Data.SqlClient;
  3. using System.Threading;
  4. using System.Diagnostics;
  1. public void ExportDataToExcel(DataTable TableName, string FileName)
  2. {
  3. SaveFileDialog saveFileDialog = new SaveFileDialog();
  4. //设置文件标题
  5. saveFileDialog.Title = "导出Excel文件";
  6. //设置文件类型
  7. saveFileDialog.Filter = "Microsoft Office Excel 工作簿(*.xls)|*.xls";
  8. //设置默认文件类型显示顺序
  9. saveFileDialog.FilterIndex = ;
  10. //是否自动在文件名中添加扩展名
  11. saveFileDialog.AddExtension = true;
  12. //是否记忆上次打开的目录
  13. saveFileDialog.RestoreDirectory = true;
  14. //设置默认文件名
  15. saveFileDialog.FileName = FileName;
  16. //按下确定选择的按钮
  17. if (saveFileDialog.ShowDialog() == DialogResult.OK)
  18. {
  19. //获得文件路径
  20. string localFilePath = saveFileDialog.FileName.ToString();
  21.  
  22. //数据初始化
  23. int TotalCount; //总行数
  24. int RowRead = ; //已读行数
  25. int Percent = ; //百分比
  26.  
  27. TotalCount = TableName.Rows.Count;
  28. lblStatus.Text = "共有" + TotalCount + "条数据";
  29. lblStatus.Visible = true;
  30. barStatus.Visible = true;
  31.  
  32. //数据流
  33. Stream myStream = saveFileDialog.OpenFile();
  34. StreamWriter sw = new StreamWriter(myStream, Encoding.GetEncoding("gb2312"));
  35. string strHeader = "";
  36.  
  37. //秒钟
  38. Stopwatch timer = new Stopwatch();
  39. timer.Start();
  40.  
  41. try
  42. {
  43. //写入标题
  44. for (int i = ; i < TableName.Columns.Count; i++)
  45. {
  46. if (i > )
  47. {
  48. strHeader += "\t";
  49. }
  50. strHeader += TableName.Columns[i].ColumnName.ToString();
  51. }
  52. sw.WriteLine(strHeader);
  53.  
  54. //写入数据
  55. //string strData;
  56. for (int i = ; i < TableName.Rows.Count; i++)
  57. {
  58. RowRead++;
  59. Percent = (int)( * RowRead / TotalCount);
  60. barStatus.Maximum = TotalCount;
  61. barStatus.Value = RowRead;
  62. lblStatus.Text = "共有" + TotalCount + "条数据,已写入" + Percent.ToString() + "%的数据,共耗时" + timer.ElapsedMilliseconds + "毫秒。";
  63. Application.DoEvents();
  64.  
  65. string strData = "";
  66. for (int j = ; j < TableName.Columns.Count; j++)
  67. {
  68. if (j > )
  69. {
  70. strData += "\t";
  71. }
  72. strData += TableName.Rows[i][j].ToString();
  73. }
  74. sw.WriteLine(strData);
  75. }
  76. //关闭数据流
  77. sw.Close();
  78. myStream.Close();
  79. //关闭秒钟
  80. timer.Reset();
  81. timer.Stop();
  82. }
  83. catch (Exception ex)
  84. {
  85. MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  86. }
  87. finally
  88. {
  89. //关闭数据流
  90. sw.Close();
  91. myStream.Close();
  92. //关闭秒钟
  93. timer.Stop();
  94. }
  95.  
  96. //成功提示
  97. if (MessageBox.Show("导出成功,是否立即打开?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
  98. {
  99. System.Diagnostics.Process.Start(localFilePath);
  100. }
  101.  
  102. //赋初始值
  103. lblStatus.Visible = false;
  104. barStatus.Visible = false;
  105. }
  106. }

后记:

美中不足的是,上述代码仅能导出到xls格式,若需导出到xlsx格式的话,仍需调整代码。

c#快速导出到Excel的更多相关文章

  1. c#使用NPOI快速导出到Excel

    接上篇博文<C#快速导出到excel>:由于此种方法不能导出成.xlsx格式,为解决此问题,本次分享使用NPOI. 参考:https://www.cnblogs.com/lazyneal/ ...

  2. 使用NPOI快速导出导入Excel

    这两天做项目需要导入导出EXCEL,是基于NPOI的封装,设计思路是使用DataTable,然后导出一个和DataTable一模一样的Excel表出来 github地址:https://github. ...

  3. 用COM方式快速导出到Excel一例,批量导出

    开发中用到填充Excel时,一个一个的填充不免太慢,现有用数组方式填充一例,可以实现COM方式快速填充. C#,VBA中用法类似 适用场景:需要自动化操作Excel的方式下使用,比较除填充数据外还要自 ...

  4. 使用HTML,CSS快速导出数据到Excel

    在应用中经常会遇到要从系统或数据库中导出数据平面文件,一般是导出到txt,csv或excel.txt和csv一般用在系统间的数据交换, 而excel一般有较好的显示效果,可以按照一定的模板导出,导出就 ...

  5. 大量数据快速导出的解决方案-Kettle

    1.开发背景 在web项目中,经常会需要查询数据导出excel,以前比较常见的就是用poi.使用poi的时候也有两种方式,一种就是直接将集合一次性导出为excel,还有一种是分批次追加的方式适合数据量 ...

  6. [转].net 使用NPOI或MyXls把DataTable导出到Excel

    本文转自:http://www.cnblogs.com/yongfa365/archive/2010/05/10/NPOI-MyXls-DataTable-To-Excel-From-Excel.ht ...

  7. 使用pentaho工具将数据库数据导入导出为Excel

    写在前面:本篇博客讲述的是如何使用pentaho工具快速的将数据库数据导出为Excel文件,以及如何将Excel文件数据导入数据库. 补充:使用此工具并不需要任何一句代码并能快速便捷解决实际问题,此工 ...

  8. delphi 导出到excel的7种方法

    本文来自 爱好者8888 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/kpc2000/article/details/17066823?utm_source=cop ...

  9. delphi 导出到excel的第1种方法

    第一种方法delphi 快速导出excel uses ComObj,clipbrd; function ToExcel(sfilename:string; ADOQuery:TADOQuery):bo ...

随机推荐

  1. js switch case注意事项

    今天写switch的时候发现没有达到预期效果,参照w3school的写法发现语法一致 想了一下,js是弱类型语言,是不是不支持number?试了一下将数字改为字符串,果然可以了 或者可以这样写:swi ...

  2. 关于weblogic报UnsatisfiedLinkError Native Library xxx.so already loaded

    一.场景 最近写的一个系统,在Tomcat测试完后说要改使用weblogic,于是在服务器上安装了weblogic,捣鼓了半天,一个个问题冒了出来,其中就有个比较麻烦的报错:UnsatisfiedLi ...

  3. php使用数组语法访问对象

    有一个对象,不过希望能用数组的语法来读写数据,可以使用 实现SPL的ArrayAccess接口来解决. 使用场景:加载配置文件类.larvel框架加载配置文件就这利用数组来操作对象. 数组式访问Obj ...

  4. php下的原生ajax请求

    浏览器中为我们提供了一个JS对象XMLHttpRequet,它可以帮助我们发送HTTP请求,并接受服务端的响应. 意味着我们的浏览器不提交,通过JS就可以请求服务器.   ajax(Asynchron ...

  5. 【SQL模板】一.修改/新增存储过程TSQL

    ---Name: 创建存储过程模板.sql ---Purpose: 用于创建 数据库中 新的存储过程 ---Author: xx ---Time: 2015-12-18 10:26:06 ---Rem ...

  6. vue-awesome-swiper插件

    http://www.cnblogs.com/songrimin/p/6905136.html 这个地址不错 在上一些我的demo代码 第一步安装 npm install vue-awesome-sw ...

  7. JavaScript开发者的工具箱

    自从HTML5变得流行以来,整个Web平台取得了长足的进步,人们也开始将JavaScript视为一门能够创建复杂应用的语言.许多新的API纷纷浮现,而关于浏览器如何应用这些技术的文章也大量涌现. 作为 ...

  8. 测试用例excel模板

    Index Precondition Action Test Data Expect Result Excute Date Pass/Fail

  9. 20155317 王新玮 2016-2017-2 《Java程序设计》第9周学习总结

    20155317 王新玮 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以 ...

  10. java常用设计模式一:单例模式

     1.饿汉式 package singleton.demo; /** * @author Administrator * @date 2019/01/07 */ public class Single ...