none
c# com Excel RRS feed

  • Pergunta

  • Boa tarde, estou desenvolvendo uma aplicação em c#, que em certo momento exporto

    dados para o Excel, acontece que só consigo finalizar o excel matando o processo, mas não quero fazer

    assim pois o usuario pode estar com outro excel aberto.

    Ja procurei bastante e não achei nada que funcione.

    Desde ja agradeço..

    valeu..

     

    sexta-feira, 2 de dezembro de 2011 19:07

Respostas

  • Valeu pelas dicas pessoal, consegui resolver pegando o Pid do processo aberto do Excel,

    primeiro eu verifico o total de processos do excel aberto.

     //passa a quantidade de Processos atuais do excel para impedir

    //que outro excel aberto seja fechado

     Process[] ProcessoExcel = Process.GetProcessesByName("EXCEL");

     foreach (Process processo in ProcessoExcel)

     {

           lclsExcel.PidProcessoExistente += processo.Id;

     }

     

    depois faço a soma novamente e faço a diferença, entao mato o processo pelo Pid

    //pega o Pid do processo atual

     Process[] ProcessoExcel = Process.GetProcessesByName("EXCEL");

     

    foreach (Process processo in ProcessoExcel)

     

    {

     

          mintPidSoma += processo.Id;

     

     }

     

     

    //subtrai do que foi passado por quem chamou

     

    lintPidProcesso = mintPidSoma - mintPidProcessoExistente;

     

    //mata o processo pelo Pid

     

    Process ProExcel = Process.GetProcessById(lintPidProcesso);

     

    ProExcel.Kill();


    se tiver outro processo aberto ele não mata.

    obrigado a todos

    segunda-feira, 5 de dezembro de 2011 15:46

Todas as Respostas

  • Isso não pode ser erro da maquina do usuário?

     

    sexta-feira, 2 de dezembro de 2011 19:30
  • Olá Wellington,

    Vc poderia postar o código que esta utilizando para fechar o Excel?

    Vc já experimentou acessar o ExcelApplication e apenas fechar os WorkBooks?
    Exemplo:

    excelApp.Workbooks.Close();
    

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    sábado, 3 de dezembro de 2011 14:43
    Moderador
  • Para acabar com esse tipo de problema você pode usar uma biblioteca que não dependa do processo do Excel para gerar arquivos .xls. A NPOI é um exemplo: http://npoi.codeplex.com/
    segunda-feira, 5 de dezembro de 2011 01:31
  • Valeu pelas dicas pessoal, consegui resolver pegando o Pid do processo aberto do Excel,

    primeiro eu verifico o total de processos do excel aberto.

     //passa a quantidade de Processos atuais do excel para impedir

    //que outro excel aberto seja fechado

     Process[] ProcessoExcel = Process.GetProcessesByName("EXCEL");

     foreach (Process processo in ProcessoExcel)

     {

           lclsExcel.PidProcessoExistente += processo.Id;

     }

     

    depois faço a soma novamente e faço a diferença, entao mato o processo pelo Pid

    //pega o Pid do processo atual

     Process[] ProcessoExcel = Process.GetProcessesByName("EXCEL");

     

    foreach (Process processo in ProcessoExcel)

     

    {

     

          mintPidSoma += processo.Id;

     

     }

     

     

    //subtrai do que foi passado por quem chamou

     

    lintPidProcesso = mintPidSoma - mintPidProcessoExistente;

     

    //mata o processo pelo Pid

     

    Process ProExcel = Process.GetProcessById(lintPidProcesso);

     

    ProExcel.Kill();


    se tiver outro processo aberto ele não mata.

    obrigado a todos

    segunda-feira, 5 de dezembro de 2011 15:46