При создании электронной таблицы Excel с помощью Open XML SDK v2.0 наши выходные данные Excel изначально успешно работали в течение нескольких месяцев. Недавно Excel (все версии) начал жаловаться на «Excel обнаружил нечитаемое содержимое в 'zot.xlsx'. Вы хотите восстановить содержимое этой книги?». Мы создаем файл в веб-приложении, используя MemoryStream
в качестве хранилища, который затем отправляется как byte[]
в HTTP-ответе с типом MIME "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
. Разархивированное содержимое плохого файла без ошибок было идентично разархивированному содержимому файла.
Excel и нечитаемое содержимое при создании электронной таблицы Open XML с помощью MemoryStream
Ответы (3)
Мы преследовали это слишком много часов, собирая по пути пару отвлекающих факторов, но в конце концов решили, что плохой файл был другим в одном отношении. Длина файла была другой. Прежде чем возвращать MemoryStream
и записывать byte[]
в ответ HTTP, убедитесь, что вы усекаете MemoryStream
, чтобы его емкость и длина были одинаковыми, используя простой stream.Capacity = (int)stream.Length;
.
Похоже, что Excel теперь обнаруживает дополнительный контент в файле как угрозу безопасности как «нечитаемое содержимое» и выдает досадную ошибку, хотя раньше он принимал такой риск.
Примечание: ответ взят из оригинального автора, у которого ранее был ответ на свой вопрос
Поочередно проверьте следующее, чтобы удалить «Ошибка нечитаемого содержимого» из Excel.
1.Убедитесь, что правильные данные записаны в правильную ячейку правильным образом. сделайте это для всех ячеек. Может случиться так, что неправильно записанные данные в однократную ячейку вызывают эту проблему. Индекс ячейки используется правильно.
2. Попробуйте использовать Cell.DataType = new EnumValue (CellValues.String) вместо общей строки. Это может помочь устранить ошибку.
3. если какая-либо ячейка содержит # VALUE / # REF / # NAME? или #DIV error, удалите эту ошибку.
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 для Microsoft Office, чтобы открыть файл .xlsx и проверить документ, это даст вам любые ошибки проверки, вызывающие нечитаемое содержимое.