2016-08-19 375 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

相關問題