2016-06-23 12 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 нет проблем.

С уважением Jaime

ответ

1

Проблема не с NPOI, но с использованием GetBuffer(). Это не тот метод, который вы хотите использовать для этой цели, поскольку GetBuffer() возвращает необработанный буфер, лежащий в основе потока памяти (обычно негабаритный), , не отключая его в текущей позиции потока. В конце это приведет к неинициализированным данным, в результате чего появится сообщение об ошибке в Excel.

ГЭТ все байты из MemoryStream, используйте ToArray():

using (var exportData = new MemoryStream()) 
{ 
    workbook.Write(exportData); 
    // return exportData.GetBuffer(); 
    return exportData.ToArray(); 
} 
Смежные вопросы