[编程工具]使用NPIO(C#)读取xls,xlsx(Excel)表格

您所在的位置:网站首页 npoi读取excelshape [编程工具]使用NPIO(C#)读取xls,xlsx(Excel)表格

[编程工具]使用NPIO(C#)读取xls,xlsx(Excel)表格

2023-09-24 18:59| 来源: 网络整理| 查看: 265

【目录】 0. 前言1. NPIO 获取2. NPIO 使用(1)打开 xlsx(2)XSSFWorkbook、ISheet,IRow,ICell(3)样例 - 读取 xlsx 为字符列表 3. 结束

0. 前言

有些时候我们需要做一些小工具来来修改和读取 Excel,但表格的数据并不如 txt 那么好操作,这个时候就可以使用 NPIO 这个程序集来操作 Excel 了。

1. NPIO 获取

首先需要打开 NuGet 并下载 NPOI,这样就可以获取到了.。 请添加图片描述 请添加图片描述

2. NPIO 使用 (1)打开 xlsx

XSSFWorkbook 可以打开表格文件,推荐用 FileStream 先打开文件再传入给 XSSFWorkbook,这样可以规定文件的访问类型。比如只读打开,因为表格打开时通常会占用表格,如果用只读方式打开就不会有冲突问题。

public static XSSFWorkbook OpenXssf(string file) { //string path, FileMode mode, FileAccess access, FileShare share XSSFWorkbook wb = null; try { FileStream fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); wb = new XSSFWorkbook(fs); fs.Close(); } catch(Exception e) { Log.PrintError(e.Message); } return wb; }

需要注意的是,在 XSSFWorkbook 中的修改和文件并没有关系,所以我们可以把文件关了,等操作完成再写入。

(2)XSSFWorkbook、ISheet,IRow,ICell

打开 xlsx 文件会得到一个 XSSFWorkbook。xlsx 文件中的工作表将对应为 ISheet。ISheet 中将表格按行读取为 IRow,每一行的中的单元数据为 ICell。

读取表格 XSSFWorkbook workBook = new XSSFWorkbook(fileStream)工作表获取 ISheet sheet = wb.GetSheetAt(i);工作表中的行 IRow row = sheet.GetRow(i);行中的单元格 ICell cell = row.GetCell(i);

所以修改xlsx,只要获取到对应的单元再进行修改就可以了,然后如果要保存,需要 workBook.Write 再将数据写入。

(3)样例 - 读取 xlsx 为字符列表

目前有个需求是,将 xlsx 中的数据读取出来,那么可以通过 XSSFWorkbook,ISheet,IRow,ICell 逐一将表格中的所有字符读取出来为字符列表,代码如下可供参考。

public static Dictionary GetXssfData(XSSFWorkbook wb,Func IsSkipSheet = null) { Dictionary result = null; if (wb != null) { result = new Dictionary(); for (int i = 0; i ISheet sheet = wb.GetSheetAt(i); result.Add(sheet.SheetName, GetSheetData(sheet)); } } } return result; } public static List GetSheetData(ISheet sheet) { List sheetList = null; if (sheet != null) { sheetList = new List(); int startRow = 0;//sheet.FirstRowNum int endRow = sheet.LastRowNum; List rowList; IRow row; IRow FirstRow = sheet.GetRow(0); for (int i = startRow; i sheetList.Add(new List()); } else { sheetList.Add(rowList); } } } return sheetList; } public static List GetRowData(IRow row) { List result = null; if (row != null) { result = new List(); int startColumn = 0; int endColumn = row.LastCellNum; for (int i = startColumn; i if (cell != null) { switch (cell.CellType) { case CellType.Unknown: return ""; case CellType.Numeric: return cell.NumericCellValue.ToString(); case CellType.String: return cell.StringCellValue; case CellType.Formula: return cell.CellFormula; case CellType.Blank: return ""; case CellType.Boolean: return cell.BooleanCellValue.ToString(); case CellType.Error: return ""; default: return ""; } } else { return ""; } }

那这个时候,表格就会变成’Dictionary',sheet 名字为字典的 key,按名字取获取每个表格,每个表格也二维的列表。

3. 结束

到这就结束咯,NPOI 的功能还是很多的,如果还有其他需求,可以再看看里面的函数,就不多说了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3