Показать сообщение отдельно
  #8  
Старый 31.03.2017, 19:04
Аватар для Alegun
Alegun Alegun вне форума
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;
...
Ответить с цитированием