
31.03.2017, 19:04
|
 |
LMD-DML
|
|
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
|
|
Пересобрал у себя, тоже не работало, а затем дошло - у вас товар с прописной буквы записан, а на листе стоимости название - с Заглавной, изменил - заработало. Или измените, либо замещяйте регистр при сравнении
З.Ы. Вот однопроходной вариант и с проверкой и с суммированием прям во время заполнения сетки
Код:
...
if OpenDialog1.Execute then
begin
vex:= CreateOleObject('Excel.Application');
try
vex.Workbooks.Open(opendialog1.FileName);
Sheet:= Vex.workbooks[1].Sheets.Item['Лист2'];
i:= 0;
sg1.ColCount:= 2;
sg1.RowCount:= 0;
while (copy(Sheet.Cells[i+1,1],1,1) <> '') do
begin
sg1.Cells[0,i]:= Sheet.Cells[i+1,1];
sg1.Cells[1,i]:= Sheet.Cells[i+1,2];
inc(i);
sg1.RowCount:= sg1.RowCount+1;
end;
Sg1.RowCount:= sg1.RowCount-1;
Sheet:= Vex.workbooks[1].Sheets.Item['Лист1'];
i:= 0;
sg.ColCount:= 6;
sg.RowCount:= 0;
Sg.Cells[5,0]:= 'Сумма';
while (copy(sheet.cells[i+1,1],1,1)<>'') do
begin
Sg.Cells[0,i]:= sheet.cells[i+1,1];
Sg.Cells[1,i]:= sheet.cells[i+1,2];
Sg.Cells[2,i]:= sheet.cells[i+1,3];
Sg.Cells[3,i]:= sheet.cells[i+1,4];
Sg.Cells[4,i]:= sheet.cells[i+1,5];
if i > 0 then
for j := 1 to sg1.RowCount-1 do
if AnsiLowerCase(sg.Cells[1,i]) =
AnsiLowerCase(sg1.Cells[0,j]) then
begin
sg.Cells[5,i]:= FloatToStr(
StrToFloat(sg.Cells[2,i]) *
StrToFloat(sg1.Cells[1,j]));
break;
end;
inc(i);
sg.RowCount:= sg.RowCount+1;
end;
sg.RowCount:= sg.RowCount-1;
finally
if not VarIsEmpty(vex) then
begin
vex.Quit;
vex:= Unassigned;
Sheet:= Unassigned;
end;
end;
end;
...
|