1. 程式人生 > >C#使用NPOI將txt文字批量轉為excel檔案

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檔案集。

     本文以下圖所示的檔案為例進行講解:
文字檔案及其路徑


     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表並儲存。
            }
        }
    }
}

   執行結果如下:
程式執行結果
在這裡插入圖片描述
在這裡插入圖片描述