ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Importar planilha excel em partes

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
karlosrapanui
Profissional
Profissional


Registrado: Terça-Feira, 29 de Agosto de 2006
Mensagens: 538

MensagemEnviada: Qua Abr 04, 2018 11:42 am    Assunto: Importar planilha excel em partes Responder com Citação

Bom dia a todos

Estou usando uma rotina para importar uma planilha csv para um stringgrid, porem a planilha tem mais de 1 milhão de registros e fica uma carroça. Eu pensei em dividir e importar aos poucos.....mas nem imagino como ou se tem como fazer isso.

Estou usando ibdataset/ Firebird / D7

A rotina de importação é a seguinte

function TfrmImportar.XlsToStringGrid(XStringGrid: TStringGrid;
xFileXLS: string): Boolean;
const
xlCellTypeLastCell = $0000000B;
var
XLSAplicacao, AbaXLS: OLEVariant;
RangeMatrix: Variant;
linha3, M, x, y, k, r: Integer;
nArq: TextFile;
Caminho, nData: string;
D:TDate;
mVALOR : extended;

s: string;
f2: double;
begin
Result := False;
XLSAplicacao := CreateOleObject('Excel.Application');
try
XLSAplicacao.Visible := False;
XLSAplicacao.Workbooks.Open(xFileXLS);

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;

{ EXPORTA PARA A TABELA }
ibdsImportacao.Open;

linha3 := 1;

gauge1.Visible := True;
gauge1.MaxValue := StringGrid1.RowCount;
gauge1.Progress := 0;
for M := 1 to StringGrid1.RowCount -1 do
begin
ibdsImportacao.Append;
ibdsImportacaoNOME.AsString := StringGrid1.Cells[1,linha3];
ibdsImportacao.Post;

gauge1.Progress := gauge1.progress + 1;
end;
linha3 := linha3 + 1;
end;
end;


Se algum puder dar uma ajuda, fico muito agradecido.

Valeu
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB