Usuário com melhor resposta
Como faço para exportar o cabeçalho da DataGridView para o Excel

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!");
}
#endregionDesde ja agradeço
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
-
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
-
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
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
-
-
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
-
-
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
-