2011-04-30 27 views
11

Al crear una hoja de cálculo de Excel con Open XML SDK v2.0, nuestra salida de Excel inicialmente funcionó correctamente durante varios meses. Recientemente Excel (todas las versiones) comenzó a quejarse acerca de que "Excel encontró contenido ilegible en 'zot.xlsx'. ¿Desea recuperar el contenido de este libro de trabajo?". Estamos creando el archivo en una aplicación web, usando un MemoryStream como la tienda, que luego se envía como un byte [] en una respuesta HTTP con un tipo MIME de "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet". El contenido descomprimido de un archivo incorrecto era idéntico al contenido descomprimido de un archivo sin errores.Excel y "contenido ilegible" al crear una hoja de cálculo Open XML con MemoryStream

+3

Es muy buena forma de responder a su propia pregunta. Pero es mala idea poner la respuesta EN la pregunta :) Debe poner la respuesta en un formulario de respuesta y marcarla como correcta, de modo que su pregunta no aparezca en las listas de preguntas sin contestar. –

Respuesta

9

Perseguimos esto durante demasiadas horas, detectando un par de pistas falsas en el camino, pero al final, resolvimos que el archivo defectuoso era diferente en un aspecto. La longitud del archivo fue diferente. Antes de devolver MemoryStream y escribir el byte [] en la respuesta HTTP, asegúrese de truncar el MemoryStream para que su capacidad y longitud sean las mismas, utilizando un simple 'stream.Capacity = stream.Length;'.

Parece que Excel ahora detecta el contenido adicional en el archivo como un riesgo de seguridad como 'contenido ilegible' y arroja el error molesto, cuando en el pasado aceptaría el riesgo.

Nota: Respuesta tomado de su creador original, que anteriormente tenía la respuesta en su pregunta

+0

¡OMG! ¡gracias! Me ahorró mucho tiempo. – Json

+0

Esto no resolvió el problema para mí :( – Renan

1

Comprobar los siguientes uno por uno para eliminar "error de contenido ilegible" de Excel.

1.Asegúrese de que los datos correctos estén escritos en la celda correcta de la forma correcta. hágalo para todas las celdas. Es posible que los datos escritos erróneamente en una sola celda causen este problema. El índice de celda se usa correctamente.

2. Intente utilizar Cell.DataType = new EnumValue (CellValues.String) en lugar de cadena compartida. Esto puede ayudar a eliminar el error.

3.si alguna celda contiene # VALUE/# REF/# NAME? o el error #DIV, elimina esos errores.

4.Este problema se produce al descargar el archivo del servidor. Creación de hojas de cálculo de Excel en una aplicación web, utilizando un MemoryStream y descargando el mismo.

utilizar el siguiente código: 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() 

si está utilizando la tecnología Aspose, utilice

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() 
0

Utilice la herramienta de productividad Open XML SDK 2.5 para Microsoft Office para abrir el archivo .xlsx y validar el documento; esto le proporcionará cualquier error de validación que cause la cont ent

Cuestiones relacionadas