Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
galera estou precisando de uma ajuda:
estou querendo importar dados de uma planilha do excel para o Delphi, eu iria manipular esses dados e depois armazenar no BD MySQL!....
alguém tem alguma idéia de como posso fazer isso???
grato.
marcio...
acho que seria melhor utilizando o TStringGrid, carregando todos os dados do excel e depois eu os manipularei, selecionado os dados que eu quero ou não e salvar no MySQL.
mas eu nunca usei o TStringGrid, o procurei na paleta não achei!!...
como faço para utiliza-lo e carregar o dados do excel nele??
O mesmo se encontra na paleta Additional... pode criar a seguinte função:
function XlsToStringGrid(AGrid: TStringGrid; AXLSFile: string): Boolean;
const
xlCellTypeLastCell = $0000000B;
var
XLApp, Sheet: OLEVariant;
RangeMatrix: Variant;
x, y, k, r: Integer; XLApp.Visible:=False;
//Abre o Workbook
XLApp.Workbooks.Open(AXLSFile);
Sheet:=XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1];
Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
//Pegar o número da última linha
x:=XLApp.ActiveCell.Row;
//Pegar o número da última coluna
y:=XLApp.ActiveCell.Column;
//Seta Stringgrid linha e coluna
AGrid.RowCount:=x;
AGrid.ColCount:=y;
//Associaca a variant WorkSheet com a variant do Delphi
RangeMatrix:=XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;
//Cria o loop para listar os registros no TStringGrid
k:=1;
repeat
for r:=1 to y do
AGrid.Cells[(r - 1),(k - 1)]:=RangeMatrix[K, R];
Inc(k,1);
until k > x;
RangeMatrix:=Unassigned; XLApp.Quit;
XLAPP:=Unassigned;
Sheet:=Unassigned;
Result:=True;
end;
end;
end;XlsToStringGrid(StringGrid1,'c:\arquivo_excel.xls');
oi marcio....
estudei todo o código!! testei e ficou perfeito.... http://forum.imasters.com.br/public/style_emoticons/default/clap.gif
obrigado!!
mas.... vou te explorar mais um pouquinho hehehhehe
tipo, o usuário teria que selecionar o local onde o arquivo está localizado, então eu teria que criar aquele formulário de localização de arquivos do windows?? ou o windows já disponibiliza isso??
por exemplo: no delphi você clica no File > Open abrirá uma interface onde o usuário seleciona o arquivo que deseja abrir... entendeu???
eu to querendo desenvolver isso tambem! Onde o usuário selecionasse a planilha que ele queira abrir. Você teria como me dar mais essa Luz!! :D
grato!!
No delphi tem componente específico para isto, na paleta Dialogs chamado OpenDialog, podendo fazer:
if OpenDialog1.Execute then
XlsToStringGrid(StringGrid1,OpenDialog1.FileName);
Marcio,
perfeito brother!!!
muito obrigado.. http://forum.imasters.com.br/public/style_emoticons/default/clap.gif
T+ http://forum.imasters.com.br/public/style_emoticons/default/bye1.gif
beleza... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
Tem duas formas eficientes de se fazer, uma é usando componentes, pode ser da paleta ADO, e outra acessando diretamente o Excel, podendo carregar tudo em um TStringGrid e trabalhar com os valores, qual das duas formas você acha que seria melhor para a sua situação ?
Buenas.
Como seria a segunda opção:
"...uma é usando componentes, pode ser da paleta ADO..."
Pois quero importar direto para meu banco de dados.
Desde já agradeço.
>
No delphi tem componente específico para isto, na paleta Dialogs chamado OpenDialog, podendo fazer:
if OpenDialog1.Execute then
XlsToStringGrid(StringGrid1,OpenDialog1.FileName);
OLA MARCIO,
CONSEGUI FAZER O PROCEDIMENTO E DEU CERTINHO. A DUVIDA AGORA É COMO FAÇO PRA GRAVAR DA STRINGGRID PARA MINHA TABELA DO BANCO.
ABRAÇO E OBRIGADO
Basta usar um laço para varrer seu stringgrid e gravar os dados. Um exemplo é esta rotina que fiz para gravar os dados de um stringgrid usando uma Stored Procedure. Basta você adaptar para o seu caso.
procedure TfrmImportaPlanilhaCamposGeradorConsulta.GravaTabelasBanco;
var iIndice : Integer;
begin
with sgridTabelas do //StringGrid
begin
For iIndice := 1 to RowCount -1 do
begin
DM.ExecutaComando('STP_INSERE_TB_TABELAS_ANALISE ' +
QuotedStr(Cells[0, iIndice]) + ',' + //Coluna 1 do StringGrid
QuotedStr(Cells[1, iIndice]), DM.qryDBNegocio); //Coluna 2 do StringGrid
end;
end;
end;
Adaptando o código acima você consegue fazer o seu próprio. Qualquer coisa posta ai.
[]'s
olá Marcio, estou parado neste ponto....ja carreguei o arquivo .xls para o stringgrid.....o problema agora eh jogar para o banco, (USO FIREBIRD)...qual melhor maneira de fazer isso?? começando pela conexao do banco...obrigado
Qual seria o componente DM.EXECUTACOMANDO ???
Qual seria o componente DM.EXECUTACOMANDO ???
Provavelmente seja um Procedure ou Function no DataModule DM...
>
Qual seria o componente DM.EXECUTACOMANDO ???
Provavelmente seja um Procedure ou Function no DataModule DM...
Exatamente isto Marcio, é uma função dentro do datamodule. Nela eu passo a sql e a query que irá executar a mesma no programa.
[]'s
Bom dia
Respondendo as perguntas:
1. Uso o Delphi 7
2. O erro acontece na Execução, quando vai executar a linha:
const
xlCellTypeLastCell = $0000000B;
Quando vai criar a constante: xlCellTypeLastCell
3. O Execell espa instalado, uso Windows XP.
4. VOu criar um topico novo.
Aguardo Resp.
To com uma duvida parecida pessoal... assim.. só pra explicar.. eu NÃO programo em Delphi... só mexi com Delphi há uns 5 anos atrás na faculdade.. e mesmo assim só o básico do básico... aí entrei num emprego novo agora e meu chefe quer que eu faça uma "aplicaçãozinha" pra pegar uns dados que estejam num memo (ou grid) e salvar num arquivo do Excel.
A versão final dessa aplicação será tipo assim:
1 - importar uma lista de matricula e nomes do banco de dados;
2 - mostra a lista na tela (num memo ou grid);
2.5 - dá a opção do usuário adicionar novos nomes E/OU matrículas na lista.
3 - salva num excel.
A versão atual (para testes) seria importar do excel, mostrar os dados, permitir a adição manual de novos dados e posteriormente exportar para um outro arquivo do excel (com nome automatico usando yyyymmddhhnnss).
será que alguém pode me dar uma ajuda pra fazer essa parte? nem que seja só salvar o conteúdo desse grid num novo xls?
vlwws!
Olá Pessoal.
Me deparei com este erro.
O método Activate da classe Range falhou'
O Problema se encontra expecificamente em Plan1.
Minha pergunta é: Existe alguma função que formate a Plan1?
Dá uma olhada neste Post... faz um bom tempo eu postei como fazer para gravar dados e gerar planilhas num arquivo excell, exportando dados de um dbgrid para uma planilha.
E sugiro que crie sempre um post novo, não reabra posts já encerrados.
Tem duas formas eficientes de se fazer, uma é usando componentes, pode ser da paleta ADO, e outra acessando diretamente o Excel, podendo carregar tudo em um TStringGrid e trabalhar com os valores, qual das duas formas você acha que seria melhor para a sua situação ?