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 :

  • 1 BitBtn (BtnImportar)
  • 1 OpenDialog (OpenDialog1)
  • 1 StringGrid (StringGrid1)

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.