importação usando opendialog

Delphi

08/10/2012

Boa Tarde!

Criei um procedimento no programa para importar dados de duas planilhas de um arquivo do excel para duas Stringrid no delphi 2010, usando o opendialog. Fiz duas funções separadas para cada stringrid. Porém, na primeira stringrid so aparece as 5 primeiras linhas da planilha do excel. Alguem poderia me dizer o que há de errado?
Segue código abaixo das 2 funções:

function XlsToStringGrid1(AGrid: TStringGrid; AXLSFile: string): Boolean;
const
xlCellTypeLastCell = $0000000B;
var
excel,planilha2: variant;
i, j, x, y, cont: integer;

begin
//cursor tempo comunicar ao usuário para que ele aguarde enquanto o formulário está sendo carregado mudando o cursor para ampulheta
try
Screen.Cursor:=crHourglass;
//abrindo o arquivo
excel:=CreateOleObject('Excel.Application'); // cria uma aplicação do Excel

//--IMPORTANTO PARA 1ª GRID.
begin
excel.workbooks.open(AXLSFile);//Abre o exel
//Abrindo primeira planilha

planilha2:=excel.workbooks[1].WorkSheets[1];
excel.Cells.SpecialCells($0000000B, EmptyParam).Activate;
//Pegar o número da última linha
x:=excel.ActiveCell.Row;
//Pegar o número da última coluna
y:=excel.ActiveCell.Column;
//Seta Stringgrid linha e coluna
AGrid.RowCount:=x;
AGrid.ColCount:=y;

//Imprimindo valores na primeira grid
for i:=1 to x do
for j:=1 to uOutput.frmOutput.stgrdOutput1.ColCount-1 do
uOutput.frmOutput.stgrdOutput1.cells[j,i]:=planilha2.cells[i+1,j+1];
end;
excel.Application.DisplayAlerts:= False;
Excel.WorkBooks[1].Close;
excel.quit;
Excel := Unassigned;
planilha2 := Unassigned;
except
Application.MessageBox('Unknown error during conversion. '+
'Please, verify your MS-Excel files.','Error',MB_OK + MB_ICONEXCLAMATION);
end;
Screen.Cursor:=crDefault;
end;

function XlsToStringGrid2(AGrid: TStringGrid; AXLSFile: string): Boolean;
const
xlCellTypeLastCell = $0000000B;
var
excel,planilha2, planilha1: variant;
i, j, x, y, l, c, cont: integer;
begin
//cursor tempo comunicar ao usuário para que ele aguarde enquanto o formulário está sendo carregado mudando o cursor para ampulheta
try
Screen.Cursor:=crHourglass;
//abrindo o arquivo
excel:=CreateOleObject('Excel.Application'); // cria uma aplicação do Excel
//--IMPORTANTO PARA 2ª GRID.
begin
excel.workbooks.open(AXLSFile);//Abre o exel
//Abrindo primeira planilha
planilha2:=excel.workbooks[1].WorkSheets[2];
planilha2.Cells.SpecialCells($0000000B, EmptyParam).Activate;
//Pegar o número da última linha
x:=excel.ActiveCell.Row;
//Pegar o número da última coluna
y:=excel.ActiveCell.Column;
//Seta Stringgrid linha e coluna
AGrid.RowCount:=x;
AGrid.ColCount:=y;
//Imprimindo valores na primeira grid
for i:=0 to x do
for j:=0 to y do
uOutput.frmOutput.stgrdOutput2.cells[j,i]:=planilha2.cells[i+1,j+1];
end;
//cursor normal
excel.Application.DisplayAlerts:= False;
Excel.WorkBooks[1].Close;
excel.quit;
Excel := Unassigned;
planilha2 := Unassigned;
except
Application.MessageBox('Unknown error during conversion. '+
'Please, verify your MS-Excel files.','Error',MB_OK + MB_ICONEXCLAMATION);
end;
Screen.Cursor:=crDefault;
end;


Adicionei ao formshow o procedimento para chamar a função, da seguinte forma:

procedure TfrmOutput.FormShow(Sender: TObject);
var
i,j:integer;
maxmatrizdados:array of array of single;

begin
if OpenDialog1.Execute then
Begin

XlsToStringGrid1(stgrdOutput1, OpenDialog1.FileName);
XlsToStringGrid2(stgrdOutput2, OpenDialog1.FileName);
End
else
begin
Screen.Cursor:=crDefault; //cursor padrão do delphi
Exit;
end;
operacao:=false;
Cinha

Cinha

Curtidas 0

Melhor post

Joel Rodrigues

Joel Rodrigues

09/10/2012

por que você não abre a planilha usando ADO? Você poderia trata-la como uma tabela de banco de dados e não precisaria de tanto trabalho.
Boa sorte.
GOSTEI 1

Mais Respostas

Thiago Schnell

Thiago Schnell

08/10/2012

começa do zero que é sempre a melhor solução para problemas insolucionaveis
GOSTEI 0
Marcos Iwazaki

Marcos Iwazaki

08/10/2012

amigo...
ler esse codigo sem formatação é complicado....

ja q para na 5 linha... é facil de debugar.. é so ter paciencia.
GOSTEI 0
Cinha

Cinha

08/10/2012

Boa Tarde!

Criei um procedimento no programa para importar dados de duas planilhas de um arquivo do excel para duas Stringrid no delphi 2010, usando o opendialog. Fiz duas funções separadas para cada stringrid. Porém, na primeira stringrid so aparece as 5 primeiras linhas da planilha do excel. Alguem poderia me dizer o que há de errado?
Segue código abaixo das 2 funções:

function XlsToStringGrid1(AGrid: TStringGrid; AXLSFile: string): Boolean;
const
xlCellTypeLastCell = $0000000B;
var
excel,planilha2: variant;
i, j, x, y, cont: integer;

begin
//cursor tempo comunicar ao usuário para que ele aguarde enquanto o formulário está sendo carregado mudando o cursor para ampulheta
try
Screen.Cursor:=crHourglass;
//abrindo o arquivo
excel:=CreateOleObject('Excel.Application'); // cria uma aplicação do Excel

//--IMPORTANTO PARA 1ª GRID.
begin
excel.workbooks.open(AXLSFile);//Abre o exel
//Abrindo primeira planilha

planilha2:=excel.workbooks[1].WorkSheets[1];
excel.Cells.SpecialCells($0000000B, EmptyParam).Activate;
//Pegar o número da última linha
x:=excel.ActiveCell.Row;
//Pegar o número da última coluna
y:=excel.ActiveCell.Column;
//Seta Stringgrid linha e coluna
AGrid.RowCount:=x;
AGrid.ColCount:=y;

//Imprimindo valores na primeira grid
for i:=1 to x do
for j:=1 to uOutput.frmOutput.stgrdOutput1.ColCount-1 do
uOutput.frmOutput.stgrdOutput1.cells[j,i]:=planilha2.cells[i+1,j+1];
end;
excel.Application.DisplayAlerts:= False;
Excel.WorkBooks[1].Close;
excel.quit;
Excel := Unassigned;
planilha2 := Unassigned;
except
Application.MessageBox('Unknown error during conversion. '+
'Please, verify your MS-Excel files.','Error',MB_OK + MB_ICONEXCLAMATION);
end;
Screen.Cursor:=crDefault;
end;

function XlsToStringGrid2(AGrid: TStringGrid; AXLSFile: string): Boolean;
const
xlCellTypeLastCell = $0000000B;
var
excel,planilha2, planilha1: variant;
i, j, x, y, l, c, cont: integer;
begin
//cursor tempo comunicar ao usuário para que ele aguarde enquanto o formulário está sendo carregado mudando o cursor para ampulheta
try
Screen.Cursor:=crHourglass;
//abrindo o arquivo
excel:=CreateOleObject('Excel.Application'); // cria uma aplicação do Excel
//--IMPORTANTO PARA 2ª GRID.
begin
excel.workbooks.open(AXLSFile);//Abre o exel
//Abrindo primeira planilha
planilha2:=excel.workbooks[1].WorkSheets[2];
planilha2.Cells.SpecialCells($0000000B, EmptyParam).Activate;
//Pegar o número da última linha
x:=excel.ActiveCell.Row;
//Pegar o número da última coluna
y:=excel.ActiveCell.Column;
//Seta Stringgrid linha e coluna
AGrid.RowCount:=x;
AGrid.ColCount:=y;
//Imprimindo valores na primeira grid
for i:=0 to x do
for j:=0 to y do
uOutput.frmOutput.stgrdOutput2.cells[j,i]:=planilha2.cells[i+1,j+1];
end;
//cursor normal
excel.Application.DisplayAlerts:= False;
Excel.WorkBooks[1].Close;
excel.quit;
Excel := Unassigned;
planilha2 := Unassigned;
except
Application.MessageBox('Unknown error during conversion. '+
'Please, verify your MS-Excel files.','Error',MB_OK + MB_ICONEXCLAMATION);
end;
Screen.Cursor:=crDefault;
end;


Adicionei ao formshow o procedimento para chamar a função, da seguinte forma:

procedure TfrmOutput.FormShow(Sender: TObject);
var
i,j:integer;
maxmatrizdados:array of array of single;

begin
if OpenDialog1.Execute then
Begin

XlsToStringGrid1(stgrdOutput1, OpenDialog1.FileName);
XlsToStringGrid2(stgrdOutput2, OpenDialog1.FileName);
End
else
begin
Screen.Cursor:=crDefault; //cursor padrão do delphi
Exit;
end;
operacao:=false;


Resolvido! Grata!!
GOSTEI 0
Alisson Santos

Alisson Santos

08/10/2012

Estou encerrando o post, qualquer duvida nos informar.
GOSTEI 0
POSTAR