Сравнение 2 файлов (.xlsx) посредством Delphi

Molchan
Дата: 05.08.2019 07:38:23
Добрый день. Задача такая, имеется 2 Excel файла с расширением .xlsx. Необходимо узнать имеется ли каждая запись первого файла во втором. В каждом файле порядка 8000 строк. Если сравнитьвать посредством OLE получается долго. Куда копать, как быть? Сильно не ругайте, новичок.
x1ca4064
Дата: 05.08.2019 07:48:01
Molchan
Если сравнитьвать посредством OLE получается долго. Куда копать, как быть?


Зависит от того, как через ОЛЕ работаете: если через Cells, это одно, а если через Range и все равно медленно, это другое.
Molchan
Дата: 05.08.2019 07:49:53
x1ca4064,

Получаю данные с ексель в массив, загружаю в StringGrid. Дальше в счетчиком по строчно проверяю..
x1ca4064
Дата: 05.08.2019 07:51:17
Molchan
x1ca4064,

Получаю данные с ексель в массив


Эту часть можно реализовать через Cells (пробегая в цикле) или через Range (сразу вариантный массив)
Molchan
Дата: 05.08.2019 07:51:26
Может есть какая то возможность запихать данные во временную таблицу и уже по этой таблице SQL запросами найти что есть, чего нет?
Molchan
Дата: 05.08.2019 07:52:11
x1ca4064,

Пример можно, если есть? Хотя бы кусок. Буду благодарен!
x1ca4064
Дата: 05.08.2019 07:59:48
Molchan
x
Пример можно, если есть? Хотя бы кусок. Буду благодарен!


Все говорят "буду..." :) Готового примера нет (точнее есть,но большой), могу подсказать, что изменить в Вашем коде.
Molchan
Дата: 05.08.2019 08:26:29
x1ca4064,

for I:= 8 to StringGrid1.RowCount do
begin
for J:= 7 to StringGrid2 do
begin
if AnsiCompareText(StringGrid1.Cells[11, i], StringGrid2.Cells[3, j] = 0) then
begin
 // выполняем действия
break;
end;
end;
end;
Molchan
Дата: 05.08.2019 08:27:37
Molchan
x1ca4064,

for I:= 8 to StringGrid1.RowCount do
begin
for J:= 7 to StringGrid2 do
begin
if AnsiCompareText(StringGrid1.Cells[11, i], StringGrid2.Cells[3, j] = 0) then
begin
 // выполняем действия
break;
end;
end;
end;


for J:= 7 to StringGrid2.RowCount do
x1ca4064
Дата: 05.08.2019 08:33:25
Molchan
x1ca4064,

for I:= 8 to StringGrid1.RowCount do
begin
for J:= 7 to StringGrid2 do
begin
if AnsiCompareText(StringGrid1.Cells[11, i], StringGrid2.Cells[3, j] = 0) then
begin
 // выполняем действия
break;
end;
end;
end;


Короче, кода нет. У Вас скорее всего, тормоза в 2 местах:
1. Получение данных - там поможет Range
2. Поиск данных - там поможет сортировка
2.5 ну и данные храните в массиве, а не в гриде.