Delphi - Como Importar Dados do Excel para StringGrid

Veja nesta Quick Tips, irei mostra como podemos criar um função para importar dados de uma planilha de Excel para um StringGrid usando o Delphi.

Olá galera, nesta Quick Tips, irei mostra como podemos criar um função para importar dados de uma planilha de Excel para um StringGrid usando o Delphi.

Vamos começar criando um novo projeto e salvando o mesmo, salvar a unit com uFrmPrincipal.pas, e nela vamos adicionar :

Antes de iniciarmos, precisamos declarar uses em ComObj

Vamos criar uma função

type TFrmPrincipal = class(TForm) BtnImportar: TBitBtn; StringGrid1: TStringGrid; OpenDialog1: TOpenDialog; private function XlsToStringGrid(XStringGrid: TStringGrid; xFileXLS: string): Boolean; { Private declarations } public { Public declarations } end;
Agora iremos implementar esta função veja como deverá ficar o código:
Function TFrmPrincipal.XlsToStringGrid(xStringGrid: TStringGrid; xFileXLS: string): Boolean; const xlCellTypeLastCell = $0000000B; var XLSAplicacao, AbaXLS: OLEVariant; RangeMatrix: Variant; x, y, k, r: Integer; begin Result := False; // Cria Excel- OLE Object XLSAplicacao := CreateOleObject('Excel.Application'); try // Esconde Excel XLSAplicacao.Visible := False; // Abre o Workbook XLSAplicacao.Workbooks.Open(xFileXLS); {Selecione aqui a aba que você deseja abrir primeiro - 1,2,3,4....} XLSAplicacao.WorkSheets[1].Activate; {Selecione aqui a aba que você deseja ativar - começando sempre no 1 (1,2,3,4) } AbaXLS := XLSAplicacao.Workbooks[ExtractFileName(xFileXLS)].WorkSheets[1]; AbaXLS.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate; // Pegar o número da última linha x := XLSAplicacao.ActiveCell.Row; // Pegar o número da última coluna y := XLSAplicacao.ActiveCell.Column; // Seta xStringGrid linha e coluna XStringGrid.RowCount := x; XStringGrid.ColCount := y; // Associaca a variant WorkSheet com a variant do Delphi RangeMatrix := XLSAplicacao.Range['A1', XLSAplicacao.Cells.Item[x, y]].Value; // Cria o loop para listar os registros no TStringGrid k := 1; repeat for r := 1 to y do XStringGrid.Cells[(r - 1), (k - 1)] := RangeMatrix[k, r]; Inc(k, 1); until k > x; RangeMatrix := Unassigned; finally // Fecha o Microsoft Excel if not VarIsEmpty(XLSAplicacao) then begin XLSAplicacao.Quit; XLSAplicacao := Unassigned; AbaXLS := Unassigned; Result := True; end; end; end;

E por final vamos ver como usar a função criada, no evento onclick do BtnIportar implemente o seguinte.

procedure TFrmPrincipal.BtnImportarClick(Sender: TObject); begin if OpenDialog1.Execute then XlsToStringGrid(StringGrid1,OpenDialog1.FileName) end;

Fico por aqui ate à próxima Quick Tips. Baixe o exemplo completo neste post.

Artigos relacionados