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;