Como fazer leitura de Arquivo CSV e XLS em Delphi
Segue abaixo solução encontrada para ler arquivos csv e xls.:
procedure TFUIImportacaoPreco. BtnLerArquivoClick(Sender: TObject);
var
I, LContarRegistro: Integer;
LColuna, LArquivoCSV: TStringList;
LArquivoXLS: String;
Excel, Sheet: Variant;
LIndice: Currency;
begin
inherited;
if (CeRefFabrica.AsInteger = CePreco.AsInteger) then
raise EValidation.Create('Antes de realizar a leitura fazer as configurações de linha e coluna');
if FECaminhoArquivo.Text = '' then
raise EValidation.Create('Selecione um arquivo');
FPosicaoCabecalho := CeCabecalho.AsInteger;
FPosicaoPreco := CePreco.AsInteger;
FPosicaoRef := CeRefFabrica.AsInteger;
if Pos('.CSV', UpperCase(Copy( FECaminhoArquivo.FileName, length(FECaminhoArquivo. FileName) -4, length(FECaminhoArquivo. FileName)))) > 0 then
begin
//Desconta 1 porque no arquivo CSV a coluna se inicia em zero, já o arquivo XLS se unicia por um.
FPosicaoCabecalho := FPosicaoCabecalho - 1;
FPosicaoPreco := FPosicaoPreco - 1;
FPosicaoRef := FPosicaoRef - 1;
cdsArquivo.EmptyDataSet;
LArquivoCSV := TStringList.Create;
LArquivoCSV.LoadFromFile( FECaminhoArquivo.FileName);
LContarRegistro := LArquivoCSV.Count;
pbBarraProgresso.Max := LContarRegistro;
for I := 1 to LContarRegistro - FPosicaoCabecalho do
begin
LColuna := SplitStr(LArquivoCSV[I],';');
cdsArquivo.Insert;
cdsArquivoCODIGO.Value := LColuna[FPosicaoRef];
cdsArquivoPRECO.AsCurrency := StrToCurr(LColuna[ FPosicaoPreco]);
QProcuraProduto.Close;
if cdsArquivoCODIGO.Value <> '' then
QProcuraProduto.ParamByName(' REF_FABRICA').AsString := cdsArquivoCODIGO.AsString;
QProcuraProduto.Open;
if QProcuraProduto.IsEmpty then
cdsArquivo.Cancel
else
begin
cdsArquivoCODPRODUTO.AsInteger := QProcuraProdutoCODPRODUTO. AsInteger;
cdsArquivoCODPRODUTO_CLAS. AsInteger := QProcuraProdutoCODPRODUTO_ CLAS.AsInteger;
cdsArquivoDSCPRODUTO.AsString := QProcuraProdutoDSCPRODUTO. AsString;
cdsArquivoREFFABRICA.AsString := QProcuraProdutoREF_FABRICA. AsString;
cdsArquivo.Post;
end;
pbBarraProgresso.Position := I;
end;
end
else if Pos('.XLS', UpperCase(Copy( FECaminhoArquivo.FileName, length(FECaminhoArquivo. FileName) -4, length(FECaminhoArquivo. FileName)))) > 0 then
begin
try
Excel := CreateOleObject('Excel. Application');
Excel.DisplayAlerts := False;
Excel.Visible := false;
Excel.WorkBooks.Open( FECaminhoArquivo.FileName);
LArquivoXLS := ChangeFileExt(ExtractFileName( FECaminhoArquivo.FileName), EmptyStr);
Sheet := Excel.Workbooks[1].WorkSheets[ LArquivoXLS];
Sheet := Excel.Workbooks[1].Sheets[1];
LContarRegistro := Sheet.Cells.SpecialCells(11). Row;
cdsArquivo.EmptyDataSet;
pbBarraProgresso.Max := LContarRegistro;
for I := FPosicaoCabecalho to LContarRegistro do
begin
cdsArquivo.Insert;
cdsArquivoCODIGO.AsString := String(Excel.WorkBooks[1]. Sheets[1].Cells[ FPosicaoCabecalho, FPosicaoRef]);
cdsArquivoPRECO.AsCurrency := StrToCurr(String(Excel. WorkBooks[1].Sheets[1].Cells[ FPosicaoCabecalho, FPosicaoPreco]));
QProcuraProduto.Close;
if (cdsArquivoCODIGO.AsString <> '') then
QProcuraProduto.ParamByName(' REF_FABRICA').AsString := cdsArquivoCODIGO.AsString;
QProcuraProduto.Open;
if QProcuraProduto.IsEmpty then
cdsArquivo.Cancel
else
begin
cdsArquivoCODPRODUTO.AsInteger := QProcuraProdutoCODPRODUTO. AsInteger;
cdsArquivoCODPRODUTO_CLAS. AsInteger := QProcuraProdutoCODPRODUTO_ CLAS.AsInteger;
cdsArquivoDSCPRODUTO.AsString := QProcuraProdutoDSCPRODUTO. AsString;
cdsArquivoREFFABRICA.AsString := QProcuraProdutoREF_FABRICA. AsString;
cdsArquivo.Post;
end;
pbBarraProgresso.Position := I;
FPosicaoCabecalho := FPosicaoCabecalho + 1;
end;
except
raise EValidation.Create('Ocorreu um erro na leitura do arquivo.');
end;
Excel.Application.quit;
end;
end;
procedure TFUIImportacaoPreco.
var
I, LContarRegistro: Integer;
LColuna, LArquivoCSV: TStringList;
LArquivoXLS: String;
Excel, Sheet: Variant;
LIndice: Currency;
begin
inherited;
if (CeRefFabrica.AsInteger = CePreco.AsInteger) then
raise EValidation.Create('Antes de realizar a leitura fazer as configurações de linha e coluna');
if FECaminhoArquivo.Text = '' then
raise EValidation.Create('Selecione um arquivo');
FPosicaoCabecalho := CeCabecalho.AsInteger;
FPosicaoPreco := CePreco.AsInteger;
FPosicaoRef := CeRefFabrica.AsInteger;
if Pos('.CSV', UpperCase(Copy(
begin
//Desconta 1 porque no arquivo CSV a coluna se inicia em zero, já o arquivo XLS se unicia por um.
FPosicaoCabecalho := FPosicaoCabecalho - 1;
FPosicaoPreco := FPosicaoPreco - 1;
FPosicaoRef := FPosicaoRef - 1;
cdsArquivo.EmptyDataSet;
LArquivoCSV := TStringList.Create;
LArquivoCSV.LoadFromFile(
LContarRegistro := LArquivoCSV.Count;
pbBarraProgresso.Max := LContarRegistro;
for I := 1 to LContarRegistro - FPosicaoCabecalho do
begin
LColuna := SplitStr(LArquivoCSV[I],';');
cdsArquivo.Insert;
cdsArquivoCODIGO.Value := LColuna[FPosicaoRef];
cdsArquivoPRECO.AsCurrency := StrToCurr(LColuna[
QProcuraProduto.Close;
if cdsArquivoCODIGO.Value <> '' then
QProcuraProduto.ParamByName('
QProcuraProduto.Open;
if QProcuraProduto.IsEmpty then
cdsArquivo.Cancel
else
begin
cdsArquivoCODPRODUTO.AsInteger := QProcuraProdutoCODPRODUTO.
cdsArquivoCODPRODUTO_CLAS.
cdsArquivoDSCPRODUTO.AsString := QProcuraProdutoDSCPRODUTO.
cdsArquivoREFFABRICA.AsString := QProcuraProdutoREF_FABRICA.
cdsArquivo.Post;
end;
pbBarraProgresso.Position := I;
end;
end
else if Pos('.XLS', UpperCase(Copy(
begin
try
Excel := CreateOleObject('Excel.
Excel.DisplayAlerts := False;
Excel.Visible := false;
Excel.WorkBooks.Open(
LArquivoXLS := ChangeFileExt(ExtractFileName(
Sheet := Excel.Workbooks[1].WorkSheets[
Sheet := Excel.Workbooks[1].Sheets[1];
LContarRegistro := Sheet.Cells.SpecialCells(11).
cdsArquivo.EmptyDataSet;
pbBarraProgresso.Max := LContarRegistro;
for I := FPosicaoCabecalho to LContarRegistro do
begin
cdsArquivo.Insert;
cdsArquivoCODIGO.AsString := String(Excel.WorkBooks[1].
cdsArquivoPRECO.AsCurrency := StrToCurr(String(Excel.
QProcuraProduto.Close;
if (cdsArquivoCODIGO.AsString <> '') then
QProcuraProduto.ParamByName('
QProcuraProduto.Open;
if QProcuraProduto.IsEmpty then
cdsArquivo.Cancel
else
begin
cdsArquivoCODPRODUTO.AsInteger := QProcuraProdutoCODPRODUTO.
cdsArquivoCODPRODUTO_CLAS.
cdsArquivoDSCPRODUTO.AsString := QProcuraProdutoDSCPRODUTO.
cdsArquivoREFFABRICA.AsString := QProcuraProdutoREF_FABRICA.
cdsArquivo.Post;
end;
pbBarraProgresso.Position := I;
FPosicaoCabecalho := FPosicaoCabecalho + 1;
end;
except
raise EValidation.Create('Ocorreu um erro na leitura do arquivo.');
end;
Excel.Application.quit;
end;
end;
Comentários
Postar um comentário