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("转化成功!");