C#使用NPOI将txt文本批量转为excel文件

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文件集。

     本文以下图所示的文件为例进行讲解:
C#使用NPOI将txt文本批量转为excel文件_第1张图片
     txt文本内容形式如下:
C#使用NPOI将txt文本批量转为excel文件_第2张图片
     获取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();
        }
        /// 
        /// 将指定路径下的txt文件转换为excel文件(其中txt中每一行表示excel中一行数据,每一行用“@”符号分割成相应的列)
        /// 
        /// txt文件的全路径
        /// 存储转换后excel文件的全路径
        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表并保存。
            }
        }
    }
}

   运行结果如下:
C#使用NPOI将txt文本批量转为excel文件_第3张图片
C#使用NPOI将txt文本批量转为excel文件_第4张图片
C#使用NPOI将txt文本批量转为excel文件_第5张图片

你可能感兴趣的:(C#)