Excel и «нечитаемый контент» при создании электронной таблицы Open XML с помощью MemoryStream

При создании электронной таблицы Excel с использованием Open XML SDK v2.0 наш вывод Excel первоначально успешно работал в течение нескольких месяцев. Недавно Excel (все версии) начал жаловаться на то, что «Excel нашел нечитаемый контент в« zot.xlsx ». Вы хотите восстановить содержимое этой книги?». Мы создаем файл в веб-приложении, используя MemoryStream в качестве хранилища, который затем отправляется в виде байта [] в ответе HTTP с типом MIME «application / vnd.openxmlformats-officedocument.spreadsheetml.sheet». Распакованное содержимое плохого файла было идентично распакованному содержимому файла без ошибок.

Мы преследовали это слишком много часов, поднимая пару красных сельдей на этом пути, но, в конце концов, решили, что плохой файл отличается в одном отношении. Длина файла была другой. Прежде чем возвращать MemoryStream и записывать байт [] в ответ HTTP, убедитесь, что вы усекаете MemoryStream так, чтобы его емкость и длина были одинаковыми, используя простой «stream.Capacity = stream.Length;».

Похоже, что Excel теперь обнаруживает дополнительный контент в файле как риск для безопасности как «нечитаемый контент» и вызывает раздражающую ошибку, когда в прошлом он принимал риск.

Примечание: ответ от оригинального плаката, у которого ранее был ответ в его вопросе

Проверьте один за другим, чтобы удалить «Нечитаемая ошибка содержимого» из excel.

1. Убедитесь, что правильные данные правильно записаны в правильной ячейке. сделайте это для всех ячеек. Может случиться так, что ошибочно записанные данные в ячейке, вызывающей эту проблему.

2. Попробуйте использовать Cell.DataType = new EnumValue (CellValues.String) вместо общей строки. Это может помочь удалить ошибку.

3.если какая-либо ячейка содержит # VALUE / # REF / # NAME? или #DIV, удалите эту ошибку.

4.Эта проблема возникает при загрузке файла с сервера. Создание Excel-листа в веб-приложении с использованием MemoryStream и загрузка его.

используйте следующий код: HttpContext.Current.Response.Clear ()

Response.ClearHeaders() Response.Buffer = False msReportStream = CType(controller.GetFromSession (Constants.SESSION_REPORT), MemoryStream) Response.ContentType = "application/vnd.openxmlformats- officedocument.spreadsheetml.sheet" Response.AddHeader("Connection", "Keep-Alive") Response.AddHeader("Content-Disposition", String.Format("attachment; filename={0}", strReportFileName)) Response.ContentEncoding = Encoding.UTF8 Response.BinaryWrite(msPNLReportStream.ToArray()) Response.Flush() Response.Close() Response.End()--use this when the code is deployed in server only not required in local.gives error in local. msReportStream.Dispose() msReportStream.Close() 

если вы используете технологию ASPOSE, используйте

Me.Response.Clear ()

 Me.Response.Buffer = False Me.Response.AddHeader("Accept-Ranges", "bytes") Response.ContentType = "application/octet-stream" Response.AddHeader("Connection", "Keep-Alive") Response.ContentEncoding = Encoding.UTF8 asposeReport.ShowSavePopUp(Me.Response, controller.GetFromSession(Constants.SESSION_REPORT), strReportFileName) Me.Response.Flush() Me.Response.Close() Me.Response.End() 

Используйте Open XML SDK 2.5 Productivity Tool для Microsoft Office, чтобы открыть файл .xlsx и проверить документ, это даст вам любые ошибки проверки, вызывающие нечитаемый контент

  • Создание сводной таблицы из XML-файла в Excel
  • XSD-сопоставление в Excel для генерации многократных экземпляров XML-элементов
  • Необходимо получить все имена полей AS400 DB2 в таблице
  • Поддержание иерархии из XML в файл Excel - Java
  • Не удалось экспортировать Excel XML
  • C # / WPF: рендеринг HTML из строки в элемент управления WPF
  • Значение domDocument createElement не допускает пробелов в php
  • xpath-> query () работает только со звездочками
  • Excel VBA конвертирует мой «TM» (Trademark TM) в моем XML в «T», когда я запускаю XSLT, который преобразует UTF-8 в ISO-8859-1
  • Открытие XML-файла с помощью EpPlus
  • Импорт XML-схемы в Excel 2016: несколько файлов схемы
  • Давайте будем гением компьютера.