News & Events
Importanto e Exportando para Excel
- 3 de novembro de 2008
- Posted by: Adriano Santos
- Category: delphi2006 delphi2007 delphi2009 dicas excel exportando importanto planilha
Muitas pessoas tem me enviado e-mails solicitando explicações de como fazer a importação e exportação de dados para Excel. Quanto a exportação, inclusive com imagem, há um artigo meu no site da DevMedia no endereço do meu DevSpace. Só procurar por Exportar para Excel com imagens. Porém, a maior dúvida é fazer exatamente o contrário.
exportação adaptando-o ao para a importanção. O maior cuidado que precisamos tomar é quanto ao formato. Por exemplo: importar uma planilha que contenha células mescladas fica bem difícil, pois perdemos a referêcia do valor. Portanto, parti do princípio que teremos uma planilha simples com linha e coluna, sem formtações especiais e levando em conta que a primeira linha é o cabeçalho, nome dos campos no banco de dados.
Tech Dica: Acesse o Tech Channel e assista a diversos vídeos sobredesenvolvimento com Delphi e outras tecnologias.
Siga autor @asrsantos no Twitter agora e fique por dentro de todas as atualizações do blog.
3. Nos eventos OnCreate e OnDestroy do formulário inclua o código da Listagem 1:
procedure TForm1.FormCreate(Sender: TObject); begin ClientDataSet1.LoadFromFile(ExtractFilePath(Application.ExeName) + 'country.xml'); ClientDataSet1.Open; end; procedure TForm1.FormDestroy(Sender: TObject); begin ClientDataSet1.Close; end;
4. No evento OnClick do Button1 inclua o código da Listagem 2.
procedure TForm1.Button1Click(Sender: TObject); var Linha: Integer; begin { Criar arquivo Excel } { Pega o usuário logado } LCID := GetUserDefaultLCID; { Torna a aplicação visível } ExcelApplication1.Visible[LCID] := True; { Remove alertas do excel } ExcelApplication1.DisplayAlerts[LCID] := False; { Cria o novo arquivo } WKBK := ExcelApplication1.Workbooks.Add(EmptyParam, LCID); { Conecta a planilha (1) que será a planilha a receber os dados } ExcelWorksheet1.ConnectTo(WKBK.Worksheets[1] as _Worksheet); { Ativa a planilha conectada } ExcelWorksheet1.Activate(LCID); { Torna possível fazer alterações } ExcelApplication1.ScreenUpdating[LCID] := True; { Atribui um nome a planilha } ExcelWorksheet1.Name := 'Relatórios via Excel'; { Faz a inserção de dados na planilha } Linha := 1; with ClientDataSet1, ExcelWorksheet1 do begin First; Range['A1', 'A1'].Value2 := 'NOME'; Range['B1', 'B1'].Value2 := 'CAPITAL'; Range['C1', 'C1'].Value2 := 'CONTINENTE'; Range['D1', 'D1'].Value2 := 'AREA'; Range['E1', 'E1'].Value2 := 'POPULAÇÃO'; while not EOF do begin Linha := Linha + 1; Range['A' + IntToStr(Linha), 'A' + IntToStr(Linha)].Value2 := FieldByName('NAME').AsString; Range['B' + IntToStr(Linha), 'B' + IntToStr(Linha)].Value2 := FieldByName('CAPITAL').AsString; Range['C' + IntToStr(Linha), 'C' + IntToStr(Linha)].Value2 := FieldByName('Continent').AsString; Range['D' + IntToStr(Linha), 'D' + IntToStr(Linha)].Value2 := FieldByName('Area').AsString; Range['E' + IntToStr(Linha), 'E' + IntToStr(Linha)].Value2 := FieldByName('Population').AsString; Next; end; end; ExcelWorksheet1.SaveAs(ExtractFilePath(Application.ExeName) + 'country.xls'); end;
Listagem 2. Evento de Exportação
Tech Dica: Leia também sobre como exportar dados de um DBGrid para Excel.
Exportando dados do DBGrid para Excel
5. No evento OnClick do Button2 inclua o código da Listagem 3.
procedure TForm1.Button2Click(Sender: TObject); var I: Integer; Nome: string; Capital: string; Continente: string; Area: string; Populacao: string; begin { Criar arquivo Excel } { Pega o usuário logado } LCID := GetUserDefaultLCID; { Torna a aplicação visível } ExcelApplication1.Visible[LCID] := True; { Remove alertas do excel } ExcelApplication1.DisplayAlerts[LCID] := False; { Cria o novo arquivo } WKBK := ExcelApplication1.Workbooks.Open( ExtractFilePath(Application.ExeName) + 'country.xls', EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, LCID); { Conecta a planilha (1) que será a planilha a receber os dados } ExcelWorksheet1.ConnectTo(WKBK.Worksheets[1] as _Worksheet); { Ativa a planilha conectada } ExcelWorksheet1.Activate(LCID); { Torna possível fazer alterações } ExcelApplication1.ScreenUpdating[LCID] := True; with ClientDataSet1, ExcelWorksheet1 do begin Open; EmptyDataSet; for I := 2 to Rows.Count do begin Nome := Range['A' + IntToStr(I), 'A' + IntToStr(I)].Value2; Capital := Range['B' + IntToStr(I), 'B' + IntToStr(I)].Value2; Continente := Range['C' + IntToStr(I), 'C' + IntToStr(I)].Value2; Area := Range['D' + IntToStr(I), 'D' + IntToStr(I)].Value2; Populacao := Range['E' + IntToStr(I), 'E' + IntToStr(I)].Value2; if not ((Trim(Nome) = '') and (Trim(Capital) = '') and (Trim(Continente) = '') and (Trim(Area) = '') and (Trim(Populacao) = '')) then begin ClientDataSet1.Append; ClientDataSet1.FieldByName('NAME').AsString := Nome; ClientDataSet1.FieldByName('CAPITAL').AsString := Capital; ClientDataSet1.FieldByName('Continent').AsString := Continente; ClientDataSet1.FieldByName('Area').AsString := Area; ClientDataSet1.FieldByName('Population').AsString := Populacao; ClientDataSet1.Post; end else Break; end; end; ShowMessage('A importação foi realizada com êxito.'); end;
Listagem 3. Evento de Importação
WKBK := ExcelApplication1.Workbooks.Add(EmptyParam, LCID); ExcelWorksheet1.ConnectTo(WKBK.Worksheets[1] as _Worksheet); ExcelWorksheet1.Activate(LCID);
ExcelWorksheet1.SaveAs(ExtractFilePath(Application.ExeName) +'country.xls');
WKBK := ExcelApplication1.Workbooks.Open( ExtractFilePath(Application.ExeName) + 'country.xls', EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, LCID);
WKBK := ExcelApplication1.Workbooks.Add(EmptyParam, LCID)
ExtractFilePath(Application.ExeName) + 'country.xls'
if not ((Trim(Nome) = '') and (Trim(Capital) = '') and (Trim(Continente) = '') and (Trim(Area) = '') and (Trim(Populacao) = '')) then
Então, gravamos o valor no ClientDataSet. O exemplo completo e funcional está na seção Downloads.
Siga @tdevrocks no Twitter agora e fique por dentro de todas as atualizações do blog.
Siga também o autor @asrsantos
Vlw pelo post… Tava precisando D+!!!
Vou olhar…
Abraços!!!!!
T+++++++++
falta algo
aqui n funfo
tanto no D7 como no 2007
aqui tbm nao funcionou, estou usando delphi 7
Muito este artigo, estou usando um exemplo parecido com este e funciona muita bem, com um pequeno problema: no momento que eu exporto para o Excel informações que possuem datas o mesmo esta invertendo elas, colocando no formato americano.
alguém ja passou por este problema?
Ola Adriano, vi o seu exemplo. ele eh muito bom. mas estou com dois problemas que gostaria muito se voce me ajudasee:
1) como saber a quantidade de sheets ( planilhas) e os seus respectivos nomes existentes em um arquivo excell?
2)Como poder e “varrer” uma a uma todas as sheets ( planilhas) do workbook ( arquivo excell)? digo isso porque preciso importar para o delphi7 um arquivo do excell que possui mais de uma planilha dentro dele, e o numero de planilhas pode ser variavel a cada arquivo de excel a ser importado.
desde ja, agradeco,
meu nome eh williamson de Lima Santos
meu email eh: WLSANTOS@GMAIL.COM
abracos,
williamson
como coloco recuo nas células via programação delphi?
meu e-mail é gabrieltecnicoinf@yahoo.com.br
Olá, estou com um problema com um codigo parecido com esse.
Quando passa nessa linha eaPlanilhaCT.Visible[LCID] := False; e depois no final quando eu dou eaPlanilhaCT.Disconnect; ele fecha tudo que for planilhas em Excel abertos no pc.. Não tem como fechar apenas essa que estou criando? o resto do codigo é praticamente igual, Ele finaliza tudo que esteja aberto de excel nessas duas linhas que postei.
Muito Bom .