我编写了以下程序,使用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();
}
}
}
答案 0 :(得分:5)
您必须使用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);
}