2016-06-23 4 views
0

私はNPOI 2.2.1を持っていて、XLSXファイルを生成してExcel 2013で開くと、問題が発生したがExcelが回復しようとする可能性があることを知らせるメッセージボックスを表示しました。 「はい」をクリックすると、最後にシートが表示されます。NPOI 2.2.1が不正なXLSXファイルを生成する

これはコードです:

 IWorkbook workbook = new XSSFWorkbook(); 
     ISheet sheet = workbook.CreateSheet(this.Title); 

     using (var exportData = new MemoryStream()) 
     { 
      workbook.Write(exportData); 
      return exportData.GetBuffer(); 
     } 

見ての通り、私は、ワークブックを作成するシートを追加し、バイト配列を返すのです。その配列は、このコードを使用してファイルに保存されています。

  string targetFile = System.IO.Path.Combine(System.IO.Path.GetTempPath(), String.Concat(btnExportar.Tag, "_", DateTime.Now.ToString("yyyyMMddHHmmss"), ".xlsx")); 
      System.IO.File.WriteAllBytes(targetFile, xls.GetExcelData()); 

XLSファイルに問題がありません。

よろしく ハイメ

答えて

1

問題はなく、GetBuffer()の使用と、NPOIではありません。これは、GetBuffer()がストリームの現在の位置で切り捨てることなくメモリストリーム(通常は特大サイズ)の基礎となるローバッファを返すので、であるため、この目的に使用するメソッドではありません。これにより、Excelにエラーメッセージが表示され、最後に初期化されていないデータが残ります。

のMemoryStreamからすべてのバイトを取得し、ToArray()使用:

using (var exportData = new MemoryStream()) 
{ 
    workbook.Write(exportData); 
    // return exportData.GetBuffer(); 
    return exportData.ToArray(); 
} 
関連する問題