欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#实现把txt文本数据快速读取到excel中

程序员文章站 2023-11-06 21:14:40
今天预实现一功能,将txt中的数据转到excel表中,做为matlab的数据源。搜集一些c#操作excel的程序。步骤如下: 下载一个microsoft.office.i...

今天预实现一功能,将txt中的数据转到excel表中,做为matlab的数据源。搜集一些c#操作excel的程序。步骤如下:

下载一个microsoft.office.interop.excel.dll   在项目中引用。

编写代码如下:

      string path = "c://date//xyu.txt";
      streamreader sr = new streamreader(path);
      string strline = sr.readline();
      int rownum = 1;
      object missing = system.reflection.missing.value;

      applicationclass app = new applicationclass();

      app.application.workbooks.add(true);

      workbook book = (workbook)app.activeworkbook;
      worksheet sheet = (worksheet)book.activesheet;
      while (!string.isnullorempty(strline))
      {
        string[] temparr;
        temparr = strline.split(',');
        for (int k = 1; k <= temparr.length; k++)
        {
          sheet.cells[rownum, k] = temparr[k - 1];

        }
        strline = sr.readline();
        rownum++;

      }

      //保存excel文件
      book.savecopyas("d://source.xls");
      //关闭文件
      book.close(false, missing, missing);
      //退出excel
      app.quit();
      messagebox.show("转化成功!");

  以上代码可以实现功能,由于txt中的数据有60501行,数据量太大。我估算了一下,用以上代码转到excel要用大约2-3分钟。我一共要转9个txt。一共要用20多分钟。这样作出系统显然是让人难以忍受的。接着找资料,发现用rang方法可以提高速率。只用大约3-4秒钟的时间,提高效率几十倍。代码如下:

 string path = "c://date//xyu.txt";
      streamreader sr = new streamreader(path);
      string strline = sr.readline();
      int rownum = 1;
      object missing = system.reflection.missing.value;

      applicationclass app = new applicationclass();

      app.application.workbooks.add(true);

      workbook book = (workbook)app.activeworkbook;
      worksheet sheet = (worksheet)book.activesheet;
      range r = sheet.get_range("a1", "c1");

      //获取行数

 
 


      object[,] objectdata = new object[65535, 3]; 
      while (!string.isnullorempty(strline))
      {
        string[] temparr;
        temparr = strline.split(',');
        for (int k = 1; k <= temparr.length; k++)
        {
          
          objectdata[rownum-1, k-1] = temparr[k - 1];

        }
        strline = sr.readline();
        rownum++;

      }
      r = r.get_resize(65535, 3);
      r.value2 = objectdata;
      r.entirecolumn.autofit();
      //保存excel文件
      book.savecopyas("d://source.xls");
      //关闭文件
      book.close(false, missing, missing);
      //退出excel
      app.quit();
      messagebox.show("转化成功!");