C#使用NPOI將txt文字批量轉為excel檔案
阿新 • • 發佈:2019-01-23
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表並儲存。
}
}
}
}
執行結果如下: