Por que mostrar mensagem de erro ao abrir o arquivo .xls

No meu asp.net, aplicativo C #, estamos gerando e baixando o arquivo .xls. Mas quando estou tentando abrir, está dando uma mensagem

“O arquivo que você está tentando abrir, ‘filename.xls’, está em um formato diferente do especificado pela extensão do arquivo. Verifique se o arquivo não está corrompido e é de uma fonte confiável antes de abrir o arquivo. Deseja abrir? o arquivo agora? ”

Se eu pressionar ‘Sim’ está abrindo. Eu mudei a extensão do arquivo para .xlsx, ainda a mesma mensagem. Alguém pode me dizer por que isso está acontecendo? Eu adicionei extensão de tipo MIME .xlsx no gerenciador do IIS com o tipo MIME como application/vnd.openxmlformats-officedocument.spreadsheetml.sheet . Ainda está mostrando a mesma mensagem. Por favor, sugira como posso me livrar dele.

Você cria completamente o arquivo xls ou copia e preenche um arquivo xls de modelo? Um arquivo de modelo de formato incorreto pode causar o problema.

Além disso, qual provedor você usa para preencher seu arquivo? – Microsoft.ACE.OLEDB.12.0 para xlsx / xlsm? – Microsoft.Jet.OLEDB.4.0 para xls?

Uma combinação incorreta de provedor / extensão pode causar o problema.

De acordo com o seu comentário, aqui está uma parte do código onde eu fiz isso no passado: (comentou algumas das linhas, pois não me lembro por que elas foram úteis)

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

Este pode ser um post antigo, mas tenho procurado respostas para o mesmo problema e achei que poderia ser útil. Parece que não está relacionado à maneira como seu aplicativo fornece o arquivo xls ao navegador. É um problema com o excesso de segurança do Office 2007.

O artigo 948615 da Microsoft explica:

Quando você abre um arquivo no Excel 2007, você recebe um aviso de que o formato do arquivo é diferente do formato especificado pela extensão de nome de arquivo.

A única solução é adicionar uma input ao registro do cliente. Eu sei que não é uma solução real para uma aplicação web, talvez com centenas de usuários, mas pelo menos você pode adicionar uma nota à página dizendo como corrigir esse aviso irritante.

Não tenho certeza de como você está exportando dados para o Excel. Definir os DisplayAlerts como false pode ajudar.

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

Eu uso interop DLL. O namespace seria Microsoft.Office.Interop.Excel . Veja a resposta de Feng Chen no seguinte link sobre como adicionar a referência: http://social.msdn.microsoft.com/Forums/en/netfxsetup/thread/c9e83756-4ae2-4ed4-b154-1537f3bb3a22

O link a seguir também pode ajudar:

http://www.dotnetperls.com/excel

O alerta é um novo recurso de segurança do Excel 2007 chamado Endurecimento de Extensão, que garante que o conteúdo do arquivo sendo aberto corresponda ao tipo de extensão especificado no comando shell que está tentando abrir o arquivo. O design atual não permite abrir conteúdo HTML de um site no Excel, a menos que a extensão da URL seja .HTM / .HTML / .MHT / .MHTML. Portanto, as páginas ASP que retornam HTML e definem o tipo MIME como algo como XLS para tentar forçar a abertura do HTML no Excel em vez do navegador da Web (como esperado) sempre obterão o alerta de segurança, pois o conteúdo não corresponde ao tipo MIME.

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

Você está usando .xls no nome do arquivo e .xlsx no tipo MIME. Tente com filname.xlsx.

A extensão de arquivo .xls (Versão 2003) suporta o layout HTML, enquanto o Office 2007 e versões anteriores não suportam isso.

Você deve exportar o arquivo excel para o formato .xlsx . Da minha experiência, ele irá apoiá-lo em todas as versões.

Adicione abaixo as DLLs na pasta bin

  • ClosedXML.dll
  • DocumentFormat.OpenXml.dll

Código para exportar arquivo para .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(); } }