NPOI是一个开源的C#读写Excel、WORD等微软OLE2组件文档的项目。可以在没有安装Office的情况下对Word或Excel文档进行读写操作。 可从NPOI官网下载,也可以直接下载我上传的NPOI.dll文件(其实这里我是不想收取积分的,但是上传时最少要输入1个积分,无奈)。
在引用中添加NPOI.dll,在命名空间前引用:
using NPOI.HSSF.UserModel; using NPOI.SS.UserModel;本文以下图所示的文件为例进行讲解: txt文本内容形式如下: 获取txt文件夹下的文件列表:
DirectoryInfo theFolder = new DirectoryInfo(@"C:\Users\Bin\Desktop\txt\"); FileInfo[] files = theFolder.GetFiles();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表并保存。 } } } }运行结果如下:
