C#使用NPOI读写Excel:安装、读取与写入操作指南
在C#开发中处理Excel文件常遇到环境依赖问题,NPOI是一个轻量级且无需安装Microsoft Office的解决方案。本文介绍如何在Visual Studio中配置NPOI库,并提供读取Excel数据及修改保存文件的C#代码示例。
结果与目标
通过集成NPOI库,C#应用程序能够直接解析.xls和.xlsx文件,实现单元格的读取、数据修改及文件重新保存,而无需依赖系统安装的Excel软件。
准备条件
- 已安装Visual Studio或其他支持C#的开发环境。
- 目标项目为.NET Framework或.NET Core/5+。
- 待操作的Excel文件路径已知。
第1步:添加NPOI库引用
目的:引入必要的动态链接库以支持Excel文件操作。
入口:Visual Studio解决方案资源管理器。
动作:
- 在项目上右键点击,选择“管理 NuGet 程序包”。
- 在浏览标签页搜索
NPOI。 - 点击安装最新版 NPOI 及其依赖项。
完成状态:项目中包含对 NPOI、Apache.Commons 等库的引用。
真实操作顺序
第2步:读取Excel文件内容
目的:遍历工作簿中的每个Sheet、Row和Cell,提取数据。
入口:C#类文件或后端服务逻辑。
动作:
- 声明
IWorkbook和FileStream实例。 - 使用
File.OpenRead(path)打开文件流。 - 将文件流传递给
XSSFWorkbook构造函数。 - 通过
wk.NumberOfSheets循环获取所有Sheet。 - 针对每个Sheet,通过
LastRowNum确定行数,逐行获取IRow。 - 每行内通过
LastCellNum确定列数,获取ICell并转换为字符串。
重要参数:注意处理 null 值的Sheet或Row,避免空引用异常。
关键代码示例:
private IWorkbook wk;
private FileStream fs;
private void OpenExcel(string path)
{
StringBuilder sbr = new StringBuilder();
try
{
using (fs = File.OpenRead(path)) // 打开Excel文件
{
wk = new XSSFWorkbook(fs); // 初始化工作簿
for (int i = 0; i < wk.NumberOfSheets; i++) // 遍历所有Sheet
{
ISheet sheet = wk.GetSheetAt(i);
for (int j = 0; j <= sheet.LastRowNum; j++) // 遍历行
{
IRow row = sheet.GetRow(j);
if (row != null)
{
sbr.AppendLine("-------------------------------------\r\n");
for (int k = 0; k <= row.LastCellNum; k++) // 遍历单元格
{
ICell cell = row.GetCell(k);
if (cell != null)
{
sbr.Append(cell.ToString()); // 获取单元格内容
}
}
}
}
}
}
}
catch (Exception ex)
{
// 建议在生产环境中记录详细日志而非仅显示MessageBox
MessageBox.Show($"文件被占用或格式错误: {ex.Message}");
}
}
第3步:修改单元格数值
目的:更新指定行列位置的单元格内容。
入口:已加载的 ISheet 对象。
动作:
- 定位目标行:
sheet.GetRow(row)。 - 定位目标单元格:
...GetCell(column)。 - 调用
SetCellValue(value)设置新值。
关键代码示例:
private void SetCellValue(ISheet sheet, int row, int column, string value)
{
// 确保行存在
IRow tmpRow = sheet.GetRow(row) ?? sheet.CreateRow(row);
ICell tmpCell = tmpRow.GetCell(column) ?? tmpRow.CreateCell(column);
// 设置文本类型值
tmpCell.SetCellValue(value);
}
注意:如果目标行或列不存在,建议先创建再赋值,以确保代码鲁棒性。
第4步:保存修改后的文件
目的:将内存中修改后的工作簿写回磁盘。
入口:包含修改内容的 IWorkbook 实例。
动作:
- 使用
File.Create(path)创建输出流。 - 调用
wk.Write(fs)将数据写入流。 - 关闭并释放文件流。
风险提醒:保存前请确保用户已备份原文件,因为此操作会覆盖原有数据。
关键代码示例:
private void SaveExcel(string path)
{
using (FileStream fs2 = File.Create(path))
{
wk.Write(fs2);
}
MessageBox.Show("文件修改成功!!!");
}
简要总结
NPOI提供了无需依赖Office即可处理Excel的强大能力。通过理解Workbook、Sheet、Row、Cell四个层级的API调用,可以灵活地实现数据的读取与写入。在实际应用中,建议补充对空单元格的判断及文件流的正确释放,以提升程序的稳定性。
以上就是C#使用NPOI库读写Excel文件的详细内容,更多关于C# Excel开发的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









