none
Mudando dados em uma planilha Excel RRS feed

  • Pergunta

  • Boa tarde,

    Tenho uma dúvida a respeito de como mudar informaçoes contidas em uma tabela excel usando o Visual studio c#.

    Para abrir a tabela executei os seguintes comandos:

     app = new Microsoft.Office.Interop.Excel.Application();

     workbook = app.Workbooks.Open(filename, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
     

    worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1);

    range = worksheet.UsedRange;

    Para escrever algo na tabela fiz da seguinte forma :

    range.Cells[linhax, columy] = "teste";

    E para sair do documento usei :

     workbook.Close(true,null, null);
     app.Quit();
     Marshal.ReleaseComObject(worksheet);
     Marshal.ReleaseComObject(workbook);
     Marshal.ReleaseComObject(app);
     GC.Collect();

    Porem as mudanças não estão sendo salvas na tabela Excel e esta dando o seguinte erro:

    


    • Editado Fulaninhuu terça-feira, 10 de julho de 2018 17:56
    terça-feira, 10 de julho de 2018 17:46

Respostas

Todas as Respostas

  • E este erro ocorre em qual linha?

    Sugiro voce nao usar Interop para tratamento de arquivos do office. O Interop exige que o excel esteja instalado.

    Arquivos to tipo XSLX sao na verdade arquivox texto compactados com o padrao ZIP e existem varias bibliotecas que tratam esse tipo de arquivo.

    Um deles é o SpreadsheetLight, e ele pode ser instalado com o NuGet.

    Veja o mesmo exemplo que o seu usando esta biblioteca:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using DocumentFormat.OpenXml;
    using DocumentFormat.OpenXml.Spreadsheet;
    using SpreadsheetLight;
    
    namespace ConsoleApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                SLDocument sl = new SLDocument("seuArquivoExcel.xlsx", "Sheet2");
                //posição E6
                integer linhax=6;
                integer columy=5;
    
                sl.SetCellValue(linhax, columy, "teste");
    
                sl.Save();
    
                Console.WriteLine("Fim");
                Console.ReadLine();
            }
        }
    }

    Bem mais simples não? E funciona sem Excel instalado.


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quarta-feira, 11 de julho de 2018 13:19
    Moderador
  • Mudei de false para o nome do arquivo e agr deu certo.

    instance.workbook.Close(true, filename, false);
    instance.app.Quit();
    Marshal.ReleaseComObject(instance.worksheet);
     Marshal.ReleaseComObject(instance.workbook);
    Marshal.ReleaseComObject(instance.app);
    GC.Collect();


    • Editado Fulaninhuu quarta-feira, 11 de julho de 2018 13:52
    quarta-feira, 11 de julho de 2018 13:27
  • >O erro ocorre em workbook.Close(true,null, null);

    É porque voce esa tentando enviar um null como nome do arquivo.

    A documentaçao do método close é esta:

    https://msdn.microsoft.com/library/microsoft.office.interop.excel._workbook.close%28v=office.15%29.aspx?f=255&MSPPError=-2147217396

    O segundo parametro é o nome do arquivo. Ele é opcional, quer dizer que voce pode nao utiliza-lo. Usar um null ali vai causar o erro.

    O correto é 

     workbook.Close(true);

    Ainda lembrando que Interop vai te causar dor de cabeça.

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".


    quarta-feira, 11 de julho de 2018 13:56
    Moderador
  • Deu certo agr, porem quando quero escrever "Aluno", no Excel aparece:

    System.Windows.Forms.TextBox, Text: Aluno

    Saberia o pq esta saindo junto" System.Windows.Forms.TextBox, Text: " e o que devo fazer para só aparecer "Aluno" ?

    System.Windows.Forms.TextBox, Text:
    quarta-feira, 11 de julho de 2018 14:07
  • Porque voce esta enviando o objeto inteiro.

    Minha bola de cristal diz que voce fez isso:

    range.Cells[linhax, columy] = txtNomeAluno;


    o correto é

    range.Cells[linhax, columy] = txtNomeAluno.Text;

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quarta-feira, 11 de julho de 2018 14:11
    Moderador
  • Muito obrigado pela ajuda !!
    quarta-feira, 11 de julho de 2018 14:19