Fórum Como Importar Dados do Excel para Delphi ? #587322
30/10/2017
0
Alguém poderia me ajudar ?
Rodrigo Oliveira
Curtir tópico
+ 0Post mais votado
31/10/2017
Fiz um exemplo seguindo o artigo indicado e não tive problema, você poderia postar o seu código fonte para darmos uma analisada, amigo?
Vou colocar aki o código completo da UNIT para você ver.
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.StdCtrls, comobj;
type
TForm1 = class(TForm)
Button1: TButton;
StringGrid1: TStringGrid;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
private
function XlsToStringGrid(xStringGrid: TStringGrid; xFileXLS: string): Boolean;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
XlsToStringGrid(StringGrid1,OpenDialog1.FileName)
end;
Function TForm1.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;
end.
Você está querendo jogar em um StringGrid para depois jogar no seu banco de dados, certo? Vc poderia enviar os dados direto do arquivo excel para o seu banco de dados, sem necessariamente passar para um StringGrid, sacou? Porém, sua planilha de excel precisa estar sempre no mesmo padrão para q não exista erros ou inconsistência.
Grande abraço
Wesley Yamazack
Gostei + 2
Mais Posts
30/10/2017
Rodrigo Oliveira
[url]https://www.devmedia.com.br/delphi-como-importar-dados-do-excel-para-stringgrid/21161[/url]
Gostei + 0
31/10/2017
Rodrigo Oliveira
Gostei + 0
01/11/2017
Wesley Yamazack
Gostei + 0
26/02/2018
Julio Ap
[dcc32 Fatal Error] importexcel.dpr(5): F2063 Could not compile used unit ''frmtesteexcel.pas''
Galera tive esse erro ao compilar o arquivo, alguem pode me ajudar?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)