Однако, когда я пытаюсь открыть файл с помощью 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