При создании электронной таблицы 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
Ответ 1
Мы преследовали это слишком много часов, подбирая по пути пару красных селедок, но в конце концов решили, что плохой файл отличается в одном отношении. Длина файла была другой. Перед возвратом MemoryStream
и записью byte[]
в ответ HTTP убедитесь, что вы MemoryStream
таким образом, чтобы его емкость и длина были одинаковыми с использованием простого stream.Capacity = (int)stream.Length;
,
Похоже, что Excel теперь определяет дополнительный контент в файле как угрозу безопасности как "нечитаемый контент" и выдает досадную ошибку, когда в прошлом он принимал риск.
Примечание: ответ взят из оригинального постера, который ранее имел ответ на свой вопрос
Ответ 2
Проверьте следующее по одному, чтобы удалить "Непрерывная ошибка содержимого" из 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()
Ответ 3
Используйте инструмент Open XML SDK 2.5 Productivity Tool для Microsoft Office для открытия файла .xlsx и проверки документа, это даст вам любые ошибки проверки, вызывающие нечитаемый контент