C#使用NPOI實(shí)現(xiàn)Excel讀取數(shù)據(jù)以及保存數(shù)據(jù)
背景
好久沒(méi)使用C#操作過(guò)Excel等文件,剛好今天有位大學(xué)同學(xué)問(wèn)到博主。
他有100多個(gè)excel表格文件,需要提取每個(gè)文件的第二行數(shù)據(jù)統(tǒng)一保存到一張表里。
后面又需要把所有文件的excel數(shù)據(jù)全部放到同一個(gè)張表,NPOI插件是插件首選。
讀取并保存
創(chuàng)建一個(gè)新的工作簿,定義表頭,創(chuàng)建表頭行。
讀取某個(gè)文件夾目錄,遍歷所有文件夾下的所有excel文件,并讀取行數(shù)據(jù),遍歷每個(gè)列的行數(shù)據(jù),追加到新的工作簿行里,最后進(jìn)行保存輸出到本地。
// 讀取xlsx
private void ReadExcelFiles(string folderPath)
{
if (!Directory.Exists(folderPath))
{
MessageBox.Show("指定的文件夾路徑不存在");
return;
}
// ===創(chuàng)建一個(gè)新的工作簿===
IWorkbook workbook = new XSSFWorkbook();
ISheet sheet = workbook.CreateSheet("Sheet1");
// 定義表頭
string[] headers = {
"字段1", "字段2", "字段3", "字段4", "字段5"
};
// 創(chuàng)建表頭行
IRow headerRow = sheet.CreateRow(0);
for (int i = 0; i < headers.Length; i++)
{
headerRow.CreateCell(i).SetCellValue(headers[i]);
}
// ===創(chuàng)建一個(gè)新的工作簿===
int rowIndex = 1;
var files = Directory.GetFiles(folderPath, "*.xlsx");
foreach (var file in files)
{
try
{
if (!File.Exists(file))
{
MessageBox.Show($"文件 {file} 不存在");
continue;
}
using (var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read))
{
IWorkbook workbook2 = new XSSFWorkbook(fileStream);
ISheet sheet2 = workbook2.GetSheetAt(0); // 獲取第一個(gè)工作表
// 獲取行數(shù)
int rowCount = sheet2.PhysicalNumberOfRows;
for (int rr = 0; rr < rowCount; rr++)
{
IRow row = sheet2.GetRow(rr + 1); // 獲取第二行
if (row != null)
{
var rowValues = row.Cells.Select(cell => cell.ToString()).ToArray();
IRow dataRow = sheet.CreateRow(rowIndex);
for (int i = 0; i < rowValues.Length; i++)
{
dataRow.CreateCell(i).SetCellValue(rowValues[i]);
}
}
rowIndex++;
}
}
}
catch (Exception ex)
{
MessageBox.Show($"讀取文件 {Path.GetFileName(file)} 時(shí)發(fā)生錯(cuò)誤: {ex.Message}");
}
}
// ===保存文件===
string filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "alldata.xlsx");
using (var fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
{
workbook.Write(fs);
}
// ===/保存文件===
}
NPOI信息
NPOI 是一個(gè)用于處理 Microsoft Office 文件的開(kāi)源庫(kù),它提供了對(duì) Excel、Word 和 PowerPoint 文件的讀寫(xiě)功能。
NPOI 支持處理 .xls 和 .xlsx 格式的 Excel 文件,.doc 和 .docx 格式的 Word 文件,.ppt 和 .pptx 格式的 PowerPoint 文件。
以下是 NPOI 的基本功能和插件介紹:
NPOI 插件介紹
1.NPOI: 核心庫(kù),用于讀取和寫(xiě)入 Office 文件的基本操作。它包含處理 Excel、Word 和 PowerPoint 文件的功能。
2.NPOI.OOXML: 支持 .xlsx 格式的 Excel 文件(即 Office 2007 及以后版本)。這是 NPOI 的一個(gè)擴(kuò)展庫(kù),提供對(duì) Excel 2007 及以后版本格式的支持。
3.NPOI.OpenXml4Net: 支持 .docx 和 .pptx 格式的文件(即 Office 2007 及以后版本)。它用于處理 Open XML 格式的文件。
4.NPOI.HSSF: 支持 .xls 格式的 Excel 文件(即 Office 97-2003 版本)。用于讀取和寫(xiě)入舊版本的 Excel 文件。
5.NPOI.SS.UserModel: 提供了處理 Excel 文件的通用接口,包括 IWorkbook、ISheet 和 IRow 等接口,適用于各種格式的 Excel 文件。
基本功能
1.Excel 文件操作
讀取 Excel 文件: 通過(guò) NPOI 讀取 .xls 和 .xlsx 文件的數(shù)據(jù),包括單元格內(nèi)容、行和列的索引等。
寫(xiě)入 Excel 文件: 可以創(chuàng)建新的 Excel 文件或修改現(xiàn)有文件,包括設(shè)置單元格的格式、字體、顏色等。
數(shù)據(jù)操作: 讀取和寫(xiě)入單元格內(nèi)容,操作行和列,插入和刪除行列,合并單元格等。
樣式和格式: 設(shè)置單元格的樣式,包括字體、顏色、邊框、對(duì)齊方式等。
2.Word 文件操作
讀取 Word 文件: 獲取 .doc 和 .docx 文件中的文本、表格、段落等。
寫(xiě)入 Word 文件: 創(chuàng)建新的 Word 文檔或修改現(xiàn)有文檔,包括添加文本、表格、圖片等。
格式設(shè)置: 設(shè)置段落格式、字體樣式、字體大小、文本顏色等。
3.PowerPoint 文件操作
讀取 PowerPoint 文件: 提取 .ppt 和 .pptx 文件中的幻燈片內(nèi)容、文本、圖片等。
寫(xiě)入 PowerPoint 文件: 創(chuàng)建新的 PowerPoint 演示文稿或修改現(xiàn)有的演示文稿,包括添加幻燈片、設(shè)置幻燈片的內(nèi)容和樣式等。
示例代碼
讀取 Excel 文件的示例
using System;
using System.IO;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel; // 對(duì)于 .xlsx 格式
// using NPOI.HSSF.UserModel; // 對(duì)于 .xls 格式
class Program
{
static void Main()
{
string filePath = "your_file_path.xlsx";
using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
IWorkbook workbook = new XSSFWorkbook(fileStream); // 對(duì)于 .xlsx 文件
ISheet sheet = workbook.GetSheetAt(0);
foreach (IRow row in sheet)
{
foreach (ICell cell in row)
{
Console.Write($"{cell.ToString()} ");
}
Console.WriteLine();
}
}
}
}寫(xiě)入 Excel 文件的示例
using System;
using System.IO;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel; // 對(duì)于 .xlsx 格式
// using NPOI.HSSF.UserModel; // 對(duì)于 .xls 格式
class Program
{
static void Main()
{
string filePath = "your_file_path.xlsx";
IWorkbook workbook = new XSSFWorkbook();
ISheet sheet = workbook.CreateSheet("Sheet1");
IRow row = sheet.CreateRow(0);
ICell cell = row.CreateCell(0);
cell.SetCellValue("Hello, NPOI!");
using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
{
workbook.Write(fileStream);
}
}
}這些示例展示了如何使用 NPOI 進(jìn)行基本的文件讀寫(xiě)操作。如果你需要更詳細(xì)的文檔或具體功能的實(shí)現(xiàn),可以參考 NPOI 的 官方文檔 或其 GitHub 頁(yè)面。
以上就是C#使用NPOI實(shí)現(xiàn)Excel讀取數(shù)據(jù)以及保存數(shù)據(jù)的詳細(xì)內(nèi)容,更多關(guān)于C# Excel數(shù)據(jù)讀取與保存的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- C#實(shí)現(xiàn)讀取Excel文件并將數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)和DataTable
- c#讀取excel數(shù)據(jù)的兩種方法實(shí)現(xiàn)
- c#利用Excel直接讀取數(shù)據(jù)到DataGridView
- C#使用NPOI實(shí)現(xiàn)將表格中數(shù)據(jù)導(dǎo)入Excel
- C#操作NPOI實(shí)現(xiàn)Excel數(shù)據(jù)導(dǎo)入導(dǎo)出
- C#使用NPOI對(duì)Excel數(shù)據(jù)進(jìn)行導(dǎo)入導(dǎo)出
- C#通過(guò)NPOI導(dǎo)入導(dǎo)出數(shù)據(jù)EXCEL
相關(guān)文章
c#棧變化規(guī)則圖解示例(棧的生長(zhǎng)與消亡)
多數(shù)情況下我們不需要關(guān)心棧的變化,下文會(huì)給出一個(gè)具體的示例。另外,理解棧的變化對(duì)于理解作用域也有一定的好處,因?yàn)镃#的局部變量作用域是基于棧的。2013-11-11
Windows系統(tǒng)中使用C#編寫(xiě)藍(lán)牙通信程序的簡(jiǎn)單實(shí)例
這篇文章主要介紹了Windows系統(tǒng)中使用C#編寫(xiě)藍(lán)牙通信程序的簡(jiǎn)單實(shí)例,文中的例子使用到了32feet.NET中的InTheHand.Net.Personal類(lèi)庫(kù),需要的朋友可以參考下2016-04-04
C#實(shí)現(xiàn)OFD格式與PDF格式的互轉(zhuǎn)
OFD格式的文檔是一種我國(guó)獨(dú)有的國(guó)家標(biāo)準(zhǔn)版式的文檔。本文將通過(guò)C#程序介紹如何實(shí)現(xiàn)由OFD與PDF的互相轉(zhuǎn)換,感興趣的小伙伴可以了解一下2022-02-02
C#模板方法模式(Template Method Pattern)實(shí)例教程
這篇文章主要介紹了C#模板方法模式(Template Method Pattern),以實(shí)例形式講述了C#抽象類(lèi)模板方法的用法,具有很高的實(shí)用價(jià)值,需要的朋友可以參考下2014-09-09

