2016-12-27 9 views
0

NPOIを初めて使用しているので、「簡単な」回答/解決策が見つからない質問があります。 (ファイルを5回クローズして開きたくない)NPOIを使用してXLSファイルを複数回保存する方法(各変更後に1回)

XLSファイルを編集する必要があります(5つのセルを値0から1に変更する必要があります)が、ファイルを保存する必要があります各変更の後(5回を意味する)。

最初の変更が保存されていることに気がつきましたが、xlsファイルを開いたときに残りの変更が表示されません。私は、ファイルのサイズが5 *(最初の変更時のファイルのサイズ)のようなものであることに気付きます。

私のコードのようなものです:

public void SetCell(int row, int col, CellData xlsCell) 
{ 
    ISheet sheet = mXLSWorkBooK.GetSheet(("mySheet1")); 
    sheet.SetActive(true); 

    ICell cell; 
    cell = sheet.CreateRow(row).CreateCell(col); 
    cell.SetCellType(CellType.String); 
    cell.SetCellValue(xlsCell.Text); 

    mXLSWorkBooK.Write(mfile); 
    mfile.Flush(); 
} 

と私は、この方法で5回を呼び出します。

答えて

0

IWorkbook.Write(stream)の仕組みを誤解している可能性があります。このメソッドは増分変更を書き出しません。常にブック全体を書き出します。既存のストリームを毎回再利用している場合は、ワークブックの内容全体がストリームの最後に追加され、破損したファイルが作成されます。 (これはまた、ファイルが書き込まれるたびにファイルのサイズが大きくなる理由についても説明します)。これは、NPOIの意図された使用パターンではありません。代わりに、毎回新しいストリームを使用し、そのストリームに書き込んでファイルを上書きする必要があります。

public static void SaveWorkbook(IWorkbook wb, string fileName) 
{ 
    using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write)) 
    { 
     wb.Write(fs); 
    } 
} 

ファイルを保存する必要があるときはいつでも、ヘルパーメソッドを呼び出すことをお勧めします。

0

再生していただきありがとうございます。 私は間違いを見つけました!

cell = sheet.CreateRow(row).CreateCell(col)を使用すると、現在の行の '次の'セルに対して、実際にその行が消去され、新しいセルのみで最初から作成された最終状態は各行の単一セルです。

関連する問題