C#怎么操作Excel文件 C#使用NPOI库读写Excel方法

来源:这里教程网 时间:2026-02-21 17:37:57 作者:

用C#操作Excel文件,推荐使用NPOI——它是Apache POI的.NET移植版,免费、开源、无需安装Office,支持.xls(Excel 97-2003)和.xlsx(Excel 2007+)格式,读写稳定,适合后台服务和批量处理。

安装NPOI NuGet包

在Visual Studio中右键项目 → “管理NuGet程序包” → 搜索并安装:
NPOI(主包,含xls/xlsx支持)
• 可选:NPOI.Extension(提供更简洁的辅助方法,如自动类型转换)

读取Excel文件(.xlsx为例)

核心是

XSSFWorkbook
(xlsx)或
HSSFWorkbook
(xls),通过工作表(
ISheet
)和行(
IRow
)、单元格(
ICell
)逐级访问:

FileStream
打开文件,构造
XSSFWorkbook
GetSheetAt(0)
GetSheet("Sheet1")
获取工作表
遍历行(
sheet.LastRowNum + 1
为总行数),跳过空行
对每个单元格调用
cell.ToString()
cell.StringCellValue
/
cell.NumericCellValue
,注意先判断
cell.CellType
避免异常

示例:读取首列姓名(假设第0行为标题,数据从第1行开始)

var fs = new FileStream("data.xlsx", FileMode.Open);
var wb = new XSSFWorkbook(fs);
var sheet = wb.GetSheetAt(0);
for (int i = 1; i   var row = sheet.GetRow(i);
  if (row == null) continue;
  var cell = row.GetCell(0);
  if (cell != null && cell.CellType == CellType.String) {
    Console.WriteLine(cell.StringCellValue);
  }
}
fs.Close(); wb.Close();

写入Excel文件(生成新.xlsx)

创建空白工作簿→添加工作表→创建行与单元格→设置值和样式→保存到文件流:

new XSSFWorkbook()
新建工作簿
workbook.CreateSheet("数据表")
添加工作表
sheet.CreateRow(0)
创建第0行,再用
row.CreateCell(0)
创建单元格
对单元格调用
SetCellValue("文本")
SetCellValue(123.45)
最后用
FileStream
写入磁盘(注意用
FileMode.Create

小技巧:可预先创建

CellStyle
(如加粗、居中、日期格式)并复用,提升性能。

常见问题与注意点

中文乱码? NPOI默认UTF-8,只要源文件编码正常、控制台/IDE支持Unicode,一般不会乱码;若导出CSV需手动指定编码。
日期读出来是数字? Excel内部用浮点数存日期,需用

cell.DateCellValue
获取
DateTime
对象,或用
cell.ToString()
直接得格式化字符串。
大文件卡顿? 避免一次性加载全部数据;可考虑
SAX
模式(
XSSFReader
)流式读取,但仅支持xlsx且不支持写入。
公式计算? NPOI默认不自动重算公式,可用
workbook.GetCreationHelper().CreateFormulaEvaluator().Evaluate(cell)
手动求值。

基本上就这些。NPOI上手快,文档全,GitHub上有大量示例。只要避开空单元格和类型误判,读写Excel很稳。

相关推荐