C#程序使用NPOI编辑excel(.xls)的单元格值不工作

我写了下面的程序来编辑使用NPOI的excel文件(.xls)的单元格值,程序运行时没有错误或exception,但是值没有得到更新

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Web; using NPOI.XSSF.UserModel; using NPOI.XSSF.Model; using NPOI.HSSF.UserModel; using NPOI.HSSF.Model; using NPOI.SS.UserModel; using NPOI.SS.Util; namespace Project37 { class Class1 { public static void Main() { string pathSource = @"C:\Users\mvmurthy\Desktop\abcd.xls"; FileStream fs = new FileStream(pathSource, FileMode.Open, FileAccess.ReadWrite); HSSFWorkbook templateWorkbook = new HSSFWorkbook(fs, true); HSSFSheet sheet = (HSSFSheet)templateWorkbook.GetSheet("Contents"); HSSFRow dataRow = (HSSFRow)sheet.GetRow(4); dataRow.Cells[2].SetCellValue("foo"); MemoryStream ms = new MemoryStream(); templateWorkbook.Write(ms); ms.Close(); } } } 

您必须使用FileStream而不是MemoryStream来保存修改过的文件,否则实际上并没有保存对磁盘所做的更改。

另外请注意,最好将一次性对象(如FileStreamusing语句中,以确保该对象在超出范围时自动处理。

所以你的代码看起来像这样:

 string pathSource = @"C:\Users\mvmurthy\Desktop\abcd.xls"; HSSFWorkbook templateWorkbook; HSSFSheet sheet; HSSFRow dataRow; using (var fs = new FileStream(pathSource, FileMode.Open, FileAccess.ReadWrite)) { templateWorkbook = new HSSFWorkbook(fs, true); sheet = (HSSFSheet)templateWorkbook.GetSheet("Contents"); dataRow = (HSSFRow)sheet.GetRow(4); dataRow.Cells[0].SetCellValue("foo"); } using (var fs = new FileStream(pathSource, FileMode.Open, FileAccess.ReadWrite)) { templateWorkbook.Write(fs); }