2016-08-19 41 views
1

我编写了下面的程序,使用NPOI编辑excel文件(.xls)的单元格值,程序运行时没有错误或异常,但值是不会得到更新C#程序使用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(); 
     }  
    } 
} 

回答

3

你必须使用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); 
} 
+0

太谢谢你了! Andy Korneyev – manvitha

相关问题