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

11次阅读

推荐使用NPOI操作excel,它是apache POI的.net移植版,免费开源、无需office,支持.xls与.xlsx格式;通过XSSFWorkbook/HSSFWorkbook读取工作表,遍历IRow与ICell获取数据,注意判断CellType避免异常。

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

用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很稳。

text=ZqhQzanResources