ClosedXML выдает ошибку «Файл поврежден» после записи расширением NPOI, но файл не поврежден C#C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 ClosedXML выдает ошибку «Файл поврежден» после записи расширением NPOI, но файл не поврежден C#

Сообщение Anonymous »

Я использую пакет ClosedXML (версия 0.95.4), чтобы открыть файл Excel (.xlsx), написанный с использованием расширения NPOI, и загрузить его в хранилище BLOB-объектов в Azure. Итак, к файлу есть доступ.
Однако, когда я пытаюсь открыть файл с помощью ClosedXML, я получаю сообщение об ошибке, что файл поврежден.
System.IO.FileFormatException: «Файл содержит поврежденные данные».
Когда я открываю файл напрямую с помощью Excel, он открывается нормально, без ошибок. Добавлю еще, что раньше этот код работал отлично, а потом вдруг перестал работать. Файл имеет расширение .xlsm.
Это код, который я записываю в файл -

Код: Выделить всё

   public Stream PopulateExcelTemplate(List dayReadingsDictionaryList, Stream stream, string filename)
{
var uploadExcelStream = new FileStream(Path.Combine(Path.GetTempPath(), filename), FileMode.Create, FileAccess.ReadWrite);
var workbook = WorkbookFactory.Create(stream);
var userUploadSheet = workbook.GetSheetAt(ExcelConstants.UserUploadSheet);
var formulaSheet = workbook.GetSheetAt(2);
formulaSheet.ForceFormulaRecalculation = true;
var descriptionRow = userUploadSheet.GetRow(ExcelConstants.descriptionRow);
var DateTimeRow = userUploadSheet.GetRow(ExcelConstants.DateTimeRow);
var rowNumber = DateTimeRow.RowNum + 1;
foreach (var dayReadingsDictionary in dayReadingsDictionaryList)
{
foreach (var obj in dayReadingsDictionary)
{
var jsonKey = obj.Key.Replace("\"", "").Trim();
var jsonValue = obj.Value == null || obj.Value.Trim() == "null" ? string.Empty : obj.Value.Replace("\"", string.Empty).Trim();

for (int columnIndex = 0; columnIndex < descriptionRow.Cells.Count; columnIndex++)
{
if (jsonKey.Equals(Constants.DateTime) &&
DateTimeRow.Cells[columnIndex] != null &&
DateTimeRow.Cells[columnIndex].ToString().Trim().Contains(Constants.DateTimeConstant))
{
var jsonDateTimeValue = System.DateTime.Parse(jsonValue);

userUploadSheet.GetRow(rowNumber).GetCell(columnIndex).SetCellValue(jsonDateTimeValue);
formulaSheet.GetRow(rowNumber).GetCell(columnIndex).SetCellValue(jsonDateTimeValue);
break;
}
else if (descriptionRow.Cells[columnIndex] != null && descriptionRow.Cells[columnIndex].ToString().Trim().Equals(jsonKey))
{
if (!string.IsNullOrEmpty(jsonValue))
userUploadSheet.GetRow(rowNumber).CreateCell(columnIndex).SetCellValue(double.Parse(jsonValue));
else
userUploadSheet.GetRow(rowNumber).CreateCell(columnIndex);
break;
}
}
}
rowNumber++;
}
А вот как я читаю файл -

Код: Выделить всё

    XLWorkbook workbook = new XLWorkbook(fileStream);
IXLWorksheet plantSheet = workbook.Worksheet(ExcelConstants.detailSheet);
var uploadExcelStream = new FileStream(Path.Combine(Path.GetTempPath(),         constants.NPOIFile), FileMode.Create, FileAccess.ReadWrite);
workbook.SaveAs(uploadExcelStream);
uploadExcelStream.Position = 0;
var workbookNPOI = WorkbookFactory.Create(uploadExcelStream);
uploadExcelStream.Close();
Код прерывается в первой строке чтения -
XLWorkbook workbook = new XLWorkbook(fileStream);
Любая помощь будет полезна .

Подробнее здесь: https://stackoverflow.com/questions/788 ... but-file-i
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»