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

本文关键字:单元格 工作 xls 程序 NPOI excel 编辑 | 更新日期: 2023-09-27 18:03:00

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

 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();
        }     
    }
}

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

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

还要注意,最好将一次性对象(如FileStream)包围在using语句中,以确保该对象在超出作用域时将被自动处置。

所以你的代码看起来像:
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);
}