1.下载NPOI
NPOI是一个开源的C#读写Excel、WORD等微软OLE2组件文档的项目。可以在没有安装Office的情况下对Word或Excel文档进行读写操作。
可从NPOI官网下载,也可以直接下载我上传的NPOI.dll文件(其实这里我是不想收取积分的,但是上传时最少要输入1个积分,无奈)。
2 .引用NPOI.dll文件
在引用中添加NPOI.dll,在命名空间前引用:
using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;
3.代码实现
(1)获取待转换的txt文件集。
本文以下图所示的文件为例进行讲解:
txt文本内容形式如下:
获取txt文件夹下的文件列表:
DirectoryInfo theFolder = new DirectoryInfo(@"C:\Users\Bin\Desktop\txt\");FileInfo[] files = theFolder.GetFiles();
(2)遍历,对每一个txt进行下面的转换
1)实例化HSSFWorkbook类,调用该类的CreateSheet方法创建一个工作簿。
HSSFWorkbook hssfworkbook = new HSSFWorkbook();Sheet sheet = hssfworkbook.CreateSheet("sheet1");
2)读取文本文件的所有行,每一行作为excel文件中的一行数据,然后将每一行数据用“@”符号分割,分割后的字符串作为对应单元格的值写入工作簿中。
//读取指定txt文件中的所有行数据,txtFullPath为txt文件的全路径(包括路径和带后缀的名称,如:C:\Users\Bin\Desktop\txt\八里河景区.txt)string[] txtLines = File.ReadAllLines(txtFullPath);for (int i = 0; i < txtLines.Length; ++i){//将txt文本中的一行数据用@分割string[] line = txtLines[i].Split('@');//创建行Row dataRow = sheet.CreateRow(i);for (int j = 0; j < line.Length; j++){//创建列,并写入值Cell cell = dataRow.CreateCell(j);cell.SetCellValue(line[j]);}}
3)将创建的工作簿写入到指定路径下的excel文件中(如果该文件不存在将会新建,如果存在则会覆盖)。
//打开指定的xls文件,excelFullPath为待转换excel文件的全路径(包括路径和带后缀的名称,如:C:\Users\Bin\Desktop\txt\八里河景区.xls)using (FileStream fs = File.OpenWrite(excelFullPath)){hssfworkbook.Write(fs);}
上面是一个大致的思路以供参考。完整代码如下:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using System.IO;namespace txts2excels{class Program{static void Main(string[] args){string txtFullPath;string excelFullPath;DirectoryInfo theFolder = new DirectoryInfo(@"C:\Users\Bin\Desktop\文本\");FileInfo[] files = theFolder.GetFiles();for (int i = 0; i < files.Length; i++){//获取txt文本全路径txtFullPath = files[i].FullName;//指定转为excel文件的全路径,这里设置为txt文本所在的文件夹下,名字与对应的txt文件一样excelFullPath = files[i].FullName.Replace("txt", "xls");//开始转换txt2excel(txtFullPath, excelFullPath);Console.WriteLine(files[i].Name + "转换成功!");}Console.WriteLine("全部转换成功!");Console.ReadKey();}/// <summary>/// 将指定路径下的txt文件转换为excel文件(其中txt中每一行表示excel中一行数据,每一行用“@”符号分割成相应的列)/// </summary>/// <param name="txtFullPath">txt文件的全路径</param>/// <param name="excelFullPath">存储转换后excel文件的全路径</param>public static void txt2excel(string txtFullPath, string excelFullPath){HSSFWorkbook hssfworkbook = new HSSFWorkbook();Sheet sheet = hssfworkbook.CreateSheet("sheet1");string[] txtLines = File.ReadAllLines(txtFullPath);for (int i = 0; i < txtLines.Length; ++i){string[] line = txtLines[i].Split('@');Row dataRow = sheet.CreateRow(i);for (int j = 0; j < line.Length; j++){Cell cell = dataRow.CreateCell(j);cell.SetCellValue(line[j]);}}using (FileStream fs = File.OpenWrite(excelFullPath)) //打开一个xls文件,如果没有则自行创建,如果存在myxls.xls文件则在创建是不要打开该文件!{hssfworkbook.Write(fs); //向打开的这个xls文件中写入mySheet表并保存。}}}}
运行结果如下: