none
Como faço para exportar o cabeçalho da DataGridView para o Excel RRS feed

  • Pergunta

  • Bom pessoal!

    Conseguir exportar as colunas para o excel, porem não consigo exportar as colunas.

    Esse foi o código que usei:

                       

    #region Botão Exporta Para Excel
            private void btnExcel_Click_1(object sender, EventArgs e)
            {
                 SaveFileDialog salvar = new SaveFileDialog();// novo

                //SaveFileDialog

                Excel.Application App; // Aplicação Excel
                Excel.Workbook WorkBook; // Pasta
                Excel.Worksheet WorkSheet; // Planilha
                object misValue = System.Reflection.Missing.Value;

                App = new Excel.Application();
                WorkBook = App.Workbooks.Add(misValue);
                WorkSheet = (Excel.Worksheet)WorkBook.Worksheets.get_Item(1);
                int i = 0;
                int j = 0;
                int k = 0; 

                // passa as celulas do DataGridView para a Pasta do Excel
                for (k = 1; k < dvgPesquisa.Columns.Count + 1; k++)
                {
                    WorkSheet.Cells[1, k] = dvgPesquisa.Columns[k - 1].HeaderText;
                    WorkSheet.Cells[1, k].Font.Bold = true;
                }

                // passa as celulas do DataGridView para a Pasta do Excel
                for (i = 0; i <= dvgPesquisa.RowCount - 1; i++)
                {
                     for (j = 0; j <= dvgPesquisa.ColumnCount - 1; j++)
                     {
                        DataGridViewCell cell = dvgPesquisa[j, i];
                        WorkSheet.Cells[i + 1, j + 1] = cell.Value;
                     }
                }

                // define algumas propriedades da caixa salvar
                salvar.Title = "Exportar para Excel";
                salvar.Filter = "Arquivo do Excel *.xls | *.xls";
                salvar.ShowDialog(); // mostra

                // salva o arquivo
                WorkBook.SaveAs(salvar.FileName, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue,

                Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
                WorkBook.Close(true, misValue, misValue);
                App.Quit(); // encerra o excel

                MessageBox.Show("Exportado com sucesso!");
            }
            #endregion

    Desde ja agradeço

    quinta-feira, 14 de fevereiro de 2013 23:00

Respostas

  • Olá amigo !

    repare  que aqui:

    // passa as celulas do DataGridView para a Pasta do Excel
    for (i = 0; i <= dvgPesquisa.RowCount - 1; i++)
    {
    	 for (j = 0; j <= dvgPesquisa.ColumnCount - 1; j++)
    	 {
    		DataGridViewCell cell = dvgPesquisa[j, i];
    		WorkSheet.Cells[i + 1, j + 1] = cell.Value;
    	 }
    }

    você inicia com 0 o i e + 1 nas incrementações, e isso faz com que você sobrescreva a parte de passar o titulo das colunas... tente usar  assim:

    // passa as celulas do DataGridView para a Pasta do Excel
    for (i = 0; i <= dvgPesquisa.RowCount - 1; i++)
    {
    	 for (j = 0; j <= dvgPesquisa.ColumnCount - 1; j++)
    	 {
    		DataGridViewCell cell = dvgPesquisa[j, i];
    		WorkSheet.Cells[i + 2, j + 1] = cell.Value;
    	 }
    }
    para resolver seu problema... Abraços !
    • Marcado como Resposta marcelo graciano terça-feira, 19 de fevereiro de 2013 16:58
    sexta-feira, 15 de fevereiro de 2013 06:06
  • tente usar algo como

    if( cell.Value.GetType() == typeof( decimal ) ||cell.Value.GetType() == typeof( double ) )
    { 
        WorkSheet.Cells[i + 2, j + 1].NumberFormat = "0,00"
    }
    
    se não der usando o typeof, tente sem...
    abraços !

    • Marcado como Resposta marcelo graciano terça-feira, 19 de fevereiro de 2013 16:58
    domingo, 17 de fevereiro de 2013 02:28
  • aee marcelo, que bom !

    vamos a parte 2 para fecharmos a thread !

    o valor vem 3,00 no grid ?

    que tipo de dados é ele e que tipos você quer ?

    • Marcado como Resposta marcelo graciano terça-feira, 19 de fevereiro de 2013 16:58
    sexta-feira, 15 de fevereiro de 2013 16:29

Todas as Respostas

  • Olá amigo !

    repare  que aqui:

    // passa as celulas do DataGridView para a Pasta do Excel
    for (i = 0; i <= dvgPesquisa.RowCount - 1; i++)
    {
    	 for (j = 0; j <= dvgPesquisa.ColumnCount - 1; j++)
    	 {
    		DataGridViewCell cell = dvgPesquisa[j, i];
    		WorkSheet.Cells[i + 1, j + 1] = cell.Value;
    	 }
    }

    você inicia com 0 o i e + 1 nas incrementações, e isso faz com que você sobrescreva a parte de passar o titulo das colunas... tente usar  assim:

    // passa as celulas do DataGridView para a Pasta do Excel
    for (i = 0; i <= dvgPesquisa.RowCount - 1; i++)
    {
    	 for (j = 0; j <= dvgPesquisa.ColumnCount - 1; j++)
    	 {
    		DataGridViewCell cell = dvgPesquisa[j, i];
    		WorkSheet.Cells[i + 2, j + 1] = cell.Value;
    	 }
    }
    para resolver seu problema... Abraços !
    • Marcado como Resposta marcelo graciano terça-feira, 19 de fevereiro de 2013 16:58
    sexta-feira, 15 de fevereiro de 2013 06:06
  • Valeu Afonso ajudou muito

    Só tenho uma duvida, quando eu exportar do datagrid para o excel tem como o valor aparecer assim: 3,00, pois na hora que exporta só vem desse jeito: 3

    Desde já muito grato

    sexta-feira, 15 de fevereiro de 2013 16:25
  • aee marcelo, que bom !

    vamos a parte 2 para fecharmos a thread !

    o valor vem 3,00 no grid ?

    que tipo de dados é ele e que tipos você quer ?

    • Marcado como Resposta marcelo graciano terça-feira, 19 de fevereiro de 2013 16:58
    sexta-feira, 15 de fevereiro de 2013 16:29
  • Isso mesmo o valor na grid vem 3,00 ele é do tipo decimal, mas quando exporto para o excel ele vem com o valor 3. Queria que quando exportasse para o excel viesse com o valor 3,00
    sábado, 16 de fevereiro de 2013 20:25
  • tente usar algo como

    if( cell.Value.GetType() == typeof( decimal ) ||cell.Value.GetType() == typeof( double ) )
    { 
        WorkSheet.Cells[i + 2, j + 1].NumberFormat = "0,00"
    }
    
    se não der usando o typeof, tente sem...
    abraços !

    • Marcado como Resposta marcelo graciano terça-feira, 19 de fevereiro de 2013 16:58
    domingo, 17 de fevereiro de 2013 02:28
  • Nossa valeu deu certo

    Muito obrigado mesmo Afonso

    terça-feira, 19 de fevereiro de 2013 16:57