文章有点水,和前几篇没有太大区别,但是单线程处理大文件导出会非常耗时间,用到多线程才能更加合理的利用资源。大文件也可能会超出excel工作表范围。这里也有相应处理

参考:用DataGridView导入TXT文件,并导出为XLS文件

参考:c#多线程介绍(上)

  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. string fileName = "";
  4. openFileDialog1.Multiselect = true;
  5. if (openFileDialog1.ShowDialog() == DialogResult.OK)
  6. {
  7. string[] filePath = openFileDialog1.FileNames;
  8. foreach (string name in filePath)
  9. {
  10. fileName = name;
  11. Thread thread = new Thread(new ParameterizedThreadStart(Go));
  12. thread.Start(fileName );
  13. }
  14. }
  15. }
  1. private void Go(object fileName1)
  2. {
  3. string fileName = (string)fileName1;
  4. System.Data.DataTable dt = new System.Data.DataTable();
  5. StreamReader sr = new StreamReader(fileName, Encoding.UTF8);
  6. for (int i = 0; i < 9; i++)
  7. {
  8. dt.Columns.Add(i.ToString());
  9. }
  10. while (true)
  11. {
  12. string strLine = sr.ReadLine();
  13. if (string.IsNullOrEmpty(strLine) == true)
  14. {
  15. break;
  16. }
  17. else
  18. {
  19. DataRow dr = dt.NewRow();
  20. string[] strList = strLine.Split('|');
  21. int j = 0;
  22. for (int i = 0; i < strList.Length - 1; i++)
  23. {
  24. dr[j.ToString()] = strList[i];
  25. j++;
  26. if (j == 9)
  27. {
  28. j = 0;
  29. dt.Rows.Add(dr);
  30. }
  31. }
  32. }
  33. }
  34. sr.Close();
  35. OutPutAsExcelFile(dt,fileName);
  36. }
  1. private void OutPutAsExcelFile(System.Data.DataTable dt,string fileName)
  2. {
  3. fileName += ".xls";
  4. Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
  5. if (xlApp == null)
  6. {
  7. MessageBox.Show("无法创建Excel对象,您的电脑可能未安装Excel");
  8. return;
  9. }
  10. Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
  11. Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
  12. MessageBox.Show(dt.Rows.Count.ToString());
  13. int n = dt.Rows.Count / (2 << 15) + 1;
  14. MessageBox.Show(n.ToString());
  15. if (n > 3)
  16. {
  17. for (int i = 0; i < n - 3; i++)
  18. {
  19. xlApp.Sheets.Add();
  20. }
  21. }
  22. for (int i = 1; i <= n; i++)
  23. {
  24. ((Microsoft.Office.Interop.Excel.Worksheet)xlApp.Sheets[i]).Name = i.ToString();//修改SHEET名
  25. }
  26. for (int l = 0; l < n; l++)
  27. {
  28. Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[l + 1];//取得sheet
  29. //Microsoft.Office.Interop.Excel.Worksheet worksheet2 = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[2];//取得sheet2
  30. int CurrentRow = l * 65536;
  31. for (int r = 0; r < 65536; r++)
  32. {
  33. if (r + CurrentRow == dt.Rows.Count)
  34. break;
  35. for (int i = 0; i < dt.Columns.Count; i++)
  36. {
  37. worksheet.Cells[r + 1, i + 1] = dt.Rows[r + CurrentRow][i];
  38. }
  39. System.Windows.Forms.Application.DoEvents();
  40. }
  41. worksheet.Columns.EntireColumn.AutoFit();//列宽自适
  42. }
  43. MessageBox.Show(fileName + "的简明资料保存成功", "提示", MessageBoxButtons.OK);
  44. if (fileName != "")
  45. {
  46. try
  47. {
  48. workbook.Saved = true;
  49. workbook.SaveCopyAs(fileName);
  50. //fileSaved = true;
  51. }
  52. catch (Exception ex)
  53. {
  54. //fileSaved = false;
  55. MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
  56. }
  57. }
  58. xlApp.Quit();
  59. GC.Collect();//强行销毁
  60. }

多线程导出大规模excel文件的更多相关文章

  1. .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)

    .Net MVC  导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构)   public cl ...

  2. C#中dategridview数据导出为excel文件

    先从数据库中获取数据,绑定在datagridview中,再从dategridview中导出为excel文件 1.新建窗体,把控件datagridview和按钮设置好,如图

  3. Reporting services导出的Excel文件避免出现隐藏行列的布局

    开发Reporting services时,为了避免在导出的Excel文件中出现隐藏的行和列,必须遵循以下规则: 1.Page header中的Textbox直接必须紧密贴合在一起 2.Page he ...

  4. 数据导出至Excel文件--好库编程网http://code1.okbase.net/codefile/SerializeHelper.cs_2012122018724_118.htm

    using System; using System.IO; using System.Data; using System.Collections; using System.Data.OleDb; ...

  5. Qt中将QTableView中的数据导出为Excel文件

    如果你在做一个报表类的程序,可能将内容导出为Excel文件是一项必须的功能.之前使用MFC的时候我就写过一个类,用于将grid中的数据导出为Excel文件.在使用了QtSql模块后,我很容易的将这个类 ...

  6. 使用JavaScript把页面上的表格导出为Excel文件

    如果在页面上展示了一个数据表格,而用户想把这个表格导出为Excel文件,那么在要求不高的情况下,可以不通过服务器生成表格,而是直接利用JavaScript的Blob和Object URL特性将表格导出 ...

  7. 网站开发进阶(三十一)js如何将html表格导出为excel文件(后记)

    js如何将html表格导出为excel文件(后记) 前言 项目前期做了个导出Excel表格的功能,但是经过测试发现只有在IE上才可以正确实现,在Chrome等浏览器中无法实现导出效果.经过上网搜索,尝 ...

  8. 网站开发进阶(二十五)js如何将html表格导出为excel文件

    js如何将html表格导出为excel文件        赠人玫瑰,手留余香.若您感觉此篇博文对您有用,请花费2秒时间点个赞,您的鼓励是我不断前进的动力,共勉! jsp页面数据导出成excel的方法很 ...

  9. Pl/sql 如何将oracle的表数据导出成excel文件?

    oracle将表数据导出成excel文件的方法 1)在SQL窗体上,查询需要导出的数据 --查询数据条件-- ; 结果视图 2)在查询结果的空白处,右键选择Copy to Excel 3) 查看导出e ...

随机推荐

  1. python笔记7:日期和时间

    Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间. 时间间隔是以秒为单位的浮点小数. 每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示. 时间 ...

  2. plsql配置远程连接数据库

    1.先安装plsql.地址:http://pan.baidu.com/s/1hqGbATI 2.  解压缩 instantclient_11_2(这个客户端可以在网上找精简版的),找到以下路径  \i ...

  3. ***CodeIgniter集成微信支付(转)

    微信支付Native扫码支付模式二之CodeIgniter集成篇  http://www.cnblogs.com/24la/p/wxpay-native-qrcode-codeigniter.html ...

  4. 浅析/dev/shm

    一,/dev/shm 概念 /dev/shm 是一个tmpfs文件系统,临时文件系统,是基于内存的文件系统,也就是说/dev/shm中的文件是直接写入内存的,而不占用硬盘空间. 在Centos和Red ...

  5. 如何把Qlik Sense嵌入到Web应用中

    (此文章同时发表在本人微信公众号"dotNET开发经验谈",欢迎右边二维码来关注.) 题记:这是一个给初学者(尤其对VS不熟悉的BI工程师)的入门操作向导. Qlik Sense是 ...

  6. Matlab 读取文件夹中所有的bmp文件

    将srcimg文件下的bmp文件转为jpg图像,存放在dstimg文件夹下 str = 'srcimg'; dst = 'dstimg'; file=dir([str,'\*.bmp']); :len ...

  7. 数据分析(8):Series介绍

    Series Series由一组数据及索引组成 索引 采用默认索引 data = pd.Series([4, 3, 2, 1]) 自定义索引 data = pd.Series([4, 3, 2, 1] ...

  8. Java 之 软件的生命周期

    1.寻找商机: a.项目:有明确的需求提供方 b.产品:没有需求提供方,由市场决定 2.可行性分析: a.国家法律法规 b.资金 c.人员技术组成 3.投标 4.需求的搜集与分析: a.参与人员:需求 ...

  9. HoloLens shell overview(Translation)

    HoloLens shell 概述 使用HoloLens时,shell是由你周围的世界和来自系统的全息图构成.我们可以称这个空间叫做混合现实(mixed world). 此shell由在你的世界里能让 ...

  10. MySLQ 为数据库远程授权的方法与问题的解决解决方法

    Mysql通过远程的连接工具连接,提示Can't connect to MySQL server (10060).  这个时候我们需要分析,看哪里设置不当而导致的该问题.   工具/原料 mysql数 ...