PROBLEMA AO GERAR UM ARQUIVO EXCEL. ATÉ GERA, MAS

 Tópico anterior Próximo tópico Novo tópico

PROBLEMA AO GERAR UM ARQUIVO EXCEL. ATÉ GERA, MAS

C#

 Compartilhe  Compartilhe  Compartilhe
#484160 - 27/08/2018 17:09:04

TUNUSAT
SAMPA
Cadast. em:Dezembro/2003


Última edição em 28/08/2018 16:17:14 por TUNUSAT

 Anexos estao visíveis somente para usuários registrados

PessoALL,

   Dúvida ao gerar um arquivo para o Excel com ASP.Net + C#.
   Estou gerando um arquivo (Exportacao-Dados-Pesquisa.xls) baseado em uma grade no ASP.Net, mas sempre ao abrir o arquivo no Excel 2013 aparece a mensagem:

"O formato de arquivo e a extensão de 'Exportacao-Dados-Pesquisa.xls' não correspondem. O arquivo pode estar corrompido ou não ser seguro. Não o abra, a menos que confie na fonte. Quer abri-lo mesmo assim?"

   Ou essa mensagem:

"Excel cannot open the file Exportacao-Dados-Pesquisa.xls' because the file format for the file extension is not valid. Verify that the file has not been corrupted and that the file extension matches the format of the file."

Meu código:


public void ExportarParaExcel(List<vmPesquisar> lstPesquisar)
{
    if (!Request.IsAuthenticated)
        FormsAuthentication.RedirectToLoginPage("Admin");

    var dtPesquisar = new DataTable("dtTblPesquisar");
    dtPesquisar.Columns.Add("Id", typeof(string));
    dtPesquisar.Columns.Add("Acionamento", typeof(string));
    dtPesquisar.Columns.Add("Associado", typeof(string));

    foreach (var item in lstPesquisar)
    {
        dtPesquisar.Rows.Add(item.intId, item.strAcionamento, item.strAssociado);
    }

    var grid = new GridView { DataSource = dtPesquisar };
    grid.DataBind();

    Response.ClearContent();
    Response.Buffer = true;

    Response.AddHeader("content-disposition", "attachment; filename=Exportacao-Dados-Pesquisa.xls");
    //Response.ContentType = "application/ms-excel";
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

    Response.Charset = "";
    var sw = new StringWriter();
    var htw = new HtmlTextWriter(sw);

    grid.RenderControl(htw);

    Response.Output.Write(sw.ToString());
    Response.Flush();
    Response.End();
}


    Se eu abro o arquivo que gerei no C# para o Excel aparece a mensagem de erro, mas se eu salvo pelo Excel e depois abro novamente, NÃO aparece mais o erro... Eu quero gerar um arquivo que abra pela primeira vez SEM erro, no padrão correto. É possível fazer isso?

    Pode ser também outro formato: (.xml, .xlsb)...

    Li alguns sites, fiz alguns exemplos, mas todos tem o mesmo problema:

==========================================

Generating Excel (XML Spreadsheet) in C#

https://www.codeproject.com/Articles/11775/Generating-Excel-XML-Spreadsheet-in-C

==========================================

Using C# to Create an Excel Document

https://www.codeproject.com/KB/cs/Excel_and_C_.aspx?display=Print

==========================================

C# - Exportando os dados de uma tabela para o formato Excel (xls)

http://www.macoratti.net/09/05/c_eax_1.htm

==========================================

How to: Use the Open XML SDK 2.0 in Visual Studio 2010 to create a simple Excel Spreadsheet (in C#)

https://blogs.technet.microsoft.com/the_microsoft_excel_support_team_blog/2013/03/04/how-to-use-the-open-xml-sdk-2-0-in-visual-studio-2010-to-create-a-simple-excel-spreadsheet-in-c/

==========================================

How to Resolve 'Excel cannot open the file '(filename)'.xlsx' Error of MS Excel?

https://www.stellarinfo.com/support/kb/index.php/article/resolve-error-excel-cannot-open-the-file-filename-xlsx

==============================================

Document Assembly Solution for SpreadsheetML

https://blogs.msdn.microsoft.com/brian_jones/2008/11/04/document-assembly-solution-for-spreadsheetml/

==============================================

Generating Excel (XmlSpreadSheet) in C# Part 2.

http://www.mysticslayer.com/?s=Generating+Excel+%28XmlSpreadSheet%29+in+C%23+Part+3

==============================================

Export GridView to Excel (xlsx, Excel 2007 Format)  Locked

'Excel 2003 : "application/vnd.ms-excel"
'Excel 2007 : "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"




Extension       MIME Type
.xlsx               application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xltx                application/vnd.openxmlformats-officedocument.spreadsheetml.template
.potx               application/vnd.openxmlformats-officedocument.presentationml.template
.ppsx              application/vnd.openxmlformats-officedocument.presentationml.slideshow
.pptx               application/vnd.openxmlformats-officedocument.presentationml.presentation
.sldx               application/vnd.openxmlformats-officedocument.presentationml.slide
.docx              application/vnd.openxmlformats-officedocument.wordprocessingml.document
.dotx               application/vnd.openxmlformats-officedocument.wordprocessingml.template
.xlam              application/vnd.ms-excel.addin.macroEnabled.12
.xlsb               application/vnd.ms-excel.sheet.binary.macroEnabled.12

These MIME types were added to IIS7 as noted in KB936496.


https://forums.asp.net/t/1221467.aspx?Export+GridView+to+Excel+xlsx+Excel+2007+Format+

==============================================

Export Dataset to Excel without Response

https://social.msdn.microsoft.com/Forums/pt-BR/a6711854-0357-4bc5-acbd-9d872bf927e2/export-dataset-to-excel-without-response?forum=aspnetpt

==============================================

     Nesse último link eu estava lendo, entendi assim:
     - "... que NÃO é possível salvar no padrão correto, pois o lado 'Client' (JAVASCRIPT) não sabe como fazer isso... "
     Só não testei ainda esse: "OpenXML SDK 2.0" ... está dentro do NuGet...

==========================================

How to: Use the Open XML SDK 2.0 in Visual Studio 2010 to create a simple Excel Spreadsheet (in C#)

https://blogs.technet.microsoft.com/the_microsoft_excel_support_team_blog/2013/03/04/how-to-use-the-open-xml-sdk-2-0-in-visual-studio-2010-to-create-a-simple-excel-spreadsheet-in-c/

==========================================

Obrigado,
Tunusat.


Haja, pois, o que houver, ampliem-se obstáculos, agigantem-se problemas, intensifiquem-se lutas ou se agravem provações, trabalha sempre no bem de todos, porque, trabalhando na Seara do Bem, podes conservar a certeza de que Deus te sustentará. Emmanuel.

#484195 - 28/08/2018 16:06:08

TUNUSAT
SAMPA
Cadast. em:Dezembro/2003


Última edição em 28/08/2018 16:15:51 por TUNUSAT

PessoALL,

   Um colega do trabalho acabou resolvendo dessa forma:

==========================================
JanKallman/EPPlus
https://github.com/JanKallman/EPPlus
==========================================


using OfficeOpenXml;
using System.Web;

public void ExportarParaExcel(List<vmPesquisar> lstPesquisar)
{
    if (!Request.IsAuthenticated)
        FormsAuthentication.RedirectToLoginPage("Admin");

    var dtPesquisar = new DataTable("dtTblPesquisar");
    dtPesquisar.Columns.Add("Id", typeof(string));
    dtPesquisar.Columns.Add("Acionamento", typeof(string));
    dtPesquisar.Columns.Add("Associado", typeof(string));

    foreach (var item in lstPesquisar)
    {
        dtPesquisar.Rows.Add(item.intId, item.strAcionamento, item.strAssociado);
    }

    ExportExcel(dtPesquisar);
}


==========================================


private void ExportExcel(DataTable dtPesquisar)
{
    FileInfo fileInfoTemplate = new FileInfo(System.Web.HttpContext.Current.Server.MapPath("~/Template/Template.xlsx"));

    OfficeOpenXml.ExcelPackage excel = new ExcelPackage(fileInfoTemplate);

    ExcelWorksheet worksheet = excel.Workbook.Worksheets.Add("Relatório");
    worksheet.Cells["A1"].LoadFromDataTable(dtPesquisar, true);

    System.IO.MemoryStream stream = new System.IO.MemoryStream();
    excel.SaveAs(stream);

    HttpContext.Response.Clear();
    HttpContext.Response.AddHeader("content-disposition", string.Format("attachment;filename=Exportacao-Dados-Pesquisa.xlsx"));
    HttpContext.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    HttpContext.Response.ContentEncoding = System.Text.Encoding.Default;
    HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);

    stream.WriteTo(Response.OutputStream);

    Response.End();
}


   O detalhe é que a mensagem não aparece mais e o tamanho do arquivo diminuiu!

   Eu estava tentando montar algo com o "Open XML SDK 2.0 for Microsoft Office" mas ainda não consegui...

==========================================
Open XML SDK 2.0 for Microsoft Office
https://www.microsoft.com/en-in/download/details.aspx?id=5124
==========================================

[]'s,
Tunusat.

Haja, pois, o que houver, ampliem-se obstáculos, agigantem-se problemas, intensifiquem-se lutas ou se agravem provações, trabalha sempre no bem de todos, porque, trabalhando na Seara do Bem, podes conservar a certeza de que Deus te sustentará. Emmanuel.

 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por TUNUSAT em 28/08/2018 16:17:22