2012-03-21 10 views
9

En mi asp.net, aplicación C# estamos generando y descargando el archivo .xls. Pero cuando estoy tratando de abrir, se está dando un mensajePor qué se muestra un mensaje de error al abrir el archivo .xls

"El archivo que está intentando abrir, 'filename.xls', está en un formato diferente de los especificados por la extensión de archivo. Compruebe que la El archivo es no está dañado y es de una fuente confiable antes de abrir el archivo. ¿Desea abrir el archivo ahora? "

Si presiono 'Sí', se abre. Cambié la extensión del archivo a .xlsx, todavía el mismo mensaje. ¿Puede alguien decirme por qué está pasando esto? He agregado .xlsx extensión de tipo MIME en el administrador de IIS con tipo MIME como application/vnd.openxmlformats-officedocument.spreadsheetml.sheet. Aún está mostrando el mismo mensaje. Por favor, sugiero cómo puedo deshacerme de él.

+0

por favor envíe el código –

+0

¿Por favor, muestre cómo genera el XLS? ¿Es formato Excel XML, entonces la extensión debe ser xml? –

+0

¿qué código estás pidiendo? – Sukanya

Respuesta

1

Cómo se crea por completo el archivo XLS o hacer copiar y rellenar una plantilla de archivo xls? Un archivo de plantilla de formato incorrecto puede causar el problema.

Además, ¿qué proveedor utiliza para completar su archivo? - Microsoft.ACE.OLEDB.12.0 para xlsx/xlsm? - Microsoft.Jet.OLEDB.4.0 para xls?

Una combinación incorrecta de proveedor/extensión puede causar el problema.

De acuerdo con su comentario, aquí es una parte de código en la que he hecho en el pasado: (comentado algunas de las líneas que no me acuerdo por qué cuando sea útil)

Response.Clear();       
Response.ContentType = "application/vnd.ms-excel"; 
//Response.ContentEncoding = Encoding.Default; 
//Response.Charset=""; 
Response.AddHeader("Content-Disposition: ", 
    String.Format(@"attachment; filename={0}",myfileName)); 

//EnableViewState = false; 

Response.Write(myFileContentAsString); 
Response.Flush(); 
Response.Close(); 
+0

Estoy creando un archivo .xls. Al principio estoy obteniendo datos usando la consulta sql de la base de datos sqlserver. Luego estoy poblando los datos en un GridView. Después de eso, usando StringWriter y HtmlTextWriter estoy escribiendo string attachment = "filename =" + File.xls; Response.ClearContent(); Response.AddHeader ("disposición de contenido", archivo adjunto); Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; GridView1.RenderControl (htw); Response.Write (sw.ToString()); Response.End(); De esta manera estoy generando el archivo de Excel. – Sukanya

+0

tu código es similar al que tengo. Pero su código también muestra el mismo mensaje. – Sukanya

+0

¿Hay alguna otra manera de crear un archivo de Excel a partir de datos del servidor SQL? – Sukanya

0

Está utilizando .xls en nombre de archivo y .xlsx en el tipo MIME. Pruebe con filname.xlsx.

+0

Intenté ambas extensiones en Tipo MIME. Está mostrando el mismo mensaje. – Sukanya

1

No estoy seguro de cómo está exportando datos a Excel. Establecer DisplayAlerts en false puede ser útil.

xlApp = new Excel.Application(); 
xlApp.DisplayAlerts = false; 

Yo uso interop DLL. El espacio de nombre sería Microsoft.Office.Interop.Excel. respuesta Ver Feng Chen en el siguiente enlace en la forma de agregar la referencia: http://social.msdn.microsoft.com/Forums/en/netfxsetup/thread/c9e83756-4ae2-4ed4-b154-1537f3bb3a22

El siguiente enlace también podría ayudar:

http://www.dotnetperls.com/excel

+0

¿cuál es el espacio de nombre para usar Excel.Application? – Sukanya

+0

Agregar ese dll creó muchos problemas. Ni siquiera me permite abrir el proyecto en sí ... Así que ... – Sukanya

+0

Probablemente debería mencionar cómo está exportando Excel en su código. – Manoj

3

Este uno podría ser una publicación anterior, pero he estado buscando respuestas para el mismo problema, y ​​pensé que podría ser útil. Parece que no está relacionado con la forma en que su aplicación le da el archivo xls al navegador. Es un problema con el exceso de seguridad de Office 2007.

de Microsoft KB article 948615 lo explica:

Cuando se abre un archivo en Excel 2007, recibirá una advertencia de que el formato de archivo es diferente del formato que la extensión de nombre de archivo especifica.

La única solución es agregar una entrada al registro del cliente. Sé que esa no es una solución real para una aplicación web, tal vez con cientos de usuarios, pero al menos se puede agregar una nota a la página diciéndole cómo solucionar esa advertencia molesta.

1

La alerta es una nueva característica de seguridad en Excel 2007 denominada Extensión endurecida, que asegura que el contenido del archivo que se abre coincide con el tipo de extensión especificado en el comando de shell que intenta abrir el archivo. El diseño actual no le permite abrir contenido HTML desde un sitio web en Excel a menos que la extensión de la URL sea .HTM/.HTML/.MHT/.MHTML. Así que las páginas ASP que devuelven HTML y configuran el tipo MIME en algo parecido a XLS para intentar forzar que el HTML se abra en Excel en lugar del navegador web (como se esperaba) siempre recibirá la alerta de seguridad ya que el contenido no coincide con el tipo MIME.

http://blogs.msdn.com/b/vsofficedeveloper/archive/2008/03/11/excel-2007-extension-warning.aspx

0

La extensión de archivo .xls (versión 2003) apoya el diseño HTML mientras que Office 2007 y versiones superiores no lo soportan.

Debe exportar el archivo Excel al formato .xlsx. Desde mi experiencia, lo apoyará en todas las versiones.

Añadir a continuación DLL en la carpeta bin

  • ClosedXML.dll
  • DocumentFormat.OpenXml.dll Código

para exportar el archivo a .xlsx

DataTable dt = new DataTable(); 
    //Create column and inser rows 
    using (XLWorkbook wb = new XLWorkbook()) 
    {   
       var ws = wb.Worksheets.Add(dt, Sheetname); 
       HttpContext.Current.Response.Clear(); 
       HttpContext.Current.Response.Buffer = true; 
       HttpContext.Current.Response.Charset = ""; 
       HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
       HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + p_FileName + ".xlsx"); 
       using (MemoryStream MyMemoryStream = new MemoryStream()) 
       { 
        wb.SaveAs(MyMemoryStream); 
        MyMemoryStream.WriteTo(HttpContext.Current.Response.OutputStream); 
        HttpContext.Current.Response.Flush(); 
        HttpContext.Current.Response.End(); 
       } 
    } 
Cuestiones relacionadas