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

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


person energyiq    schedule 30.04.2011    source источник
comment
Это очень хороший способ ответить на свой вопрос. Но ставить ответ В вопросе - плохой тон :) Вы должны поместить ответ в форму ответа и пометить его как правильный, чтобы ваш вопрос не попал в списки неотвеченных вопросов.   -  person Ben Fulton    schedule 25.10.2011


Ответы (3)


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

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

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

person Edward Wilde    schedule 17.11.2011

Поочередно проверьте следующее, чтобы удалить «Ошибка нечитаемого содержимого» из 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()
person sudipta ghosh    schedule 18.12.2012

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

person jph    schedule 30.08.2013
comment
Добро пожаловать в Stackoverflow! - person Jeremy Thompson; 13.12.2019