![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 09.04.2017
Сообщений: 2
|
![]()
Помогите понять в чем ошибка, и что я делаю не так. Задача, которую хочу решить заключается в следующем: из файла "А" получаю код файла-расшифровки, дату платежа и сумму. По полученному из этого файла коду открываю файл-расшифровку того же типа и получаю от туда список платежей(от кого и сколько). Код работает, но один раз. Открывает оба файла, читает и получает нужную информацию и после первого же прохода выдает это: project project1.exe raised exception class EVariantInvalidOpError with message 'Invalid variant operation'. Process stopped/ Use Step or Run to continue.
Код HTML:
//загрузка списков procedure TForm1.Button1Click(Sender: TObject); var sum1:integer; //1 - кол-во плетельщиков sum2:real; //2 - сумма перевода за файл str1,str2:string; //1-код файла с реестром перечислений 2-баланс для внесения Od : TOpenDialog; Range1,Range2: Variant; begin try E:=CreateOleObject(ExAp); // открываем документ E.WorkBooks.Open('D:\shron\Данные по реестрам НП.xls'); except begin //файл не найден, выбираем для открытия другой Od := OpenDialog1; if Od.InitialDir = '' then Od.InitialDir := ExtractFilePath( Application.ExeName ); if not Od.Execute then Exit; if not FileExists(Od.FileName) then E:=CreateOleObject(ExAp); E.WorkBooks.Open(Od.FileName); end; end; //показать выбранный файл E.Visible:=true; //получаем код файла с расшифровкой Range1:=E.ActiveSheet.Range['A1:F50']; for a:=2 to 50 do begin sum1:=0; sum2:=0; str1:=Range1.Cells[a,1].Value; if str1='' then Break else begin try E.WorkBooks.Open('D:\shron\Реестр НП № '+str1+'_Транзит.xls'); except begin ShowMessage('Файл с именем'+' "Реестр НП № '+str1+'_Транзит.xls" '+'не найден'+#13+'Проверьте наличие указанного файла.'); Exit; end; end; Range2:=E.ActiveSheet.Range['A2:I200']; for b:=1 to 200 do begin str2:=Range2.Cells[b,9].Value; if str2='' then Break else if StrToInt(Range2.Cells[b,9].Value)>0 then begin StringGrid1.RowCount:=StringGrid1.RowCount+1; StringGrid1.Cells[0,StringGrid1.RowCount-2]:=Range2.Cells[b,1].Value;//fromind StringGrid1.Cells[1,StringGrid1.RowCount-2]:=Range2.Cells[b,2].Value;//msg - накладная наша StringGrid1.Cells[2,StringGrid1.RowCount-2]:=Range2.Cells[b,9].Value;//paysum StringGrid1.Cells[3,StringGrid1.RowCount-2]:=Range2.Cells[b,7].Value;//fromname StringGrid1.Cells[4,StringGrid1.RowCount-2]:=Range2.Cells[b,5].Value;//paydate - дата платежа StringGrid1.Cells[5,StringGrid1.RowCount-2]:=Range2.Cells[b,6].Value;//fromadr - адрес sum1:=sum1+1; sum2:=sum2+Range2.Cells[b,9]; end; end; end; { //блок временно выключен Range1.Cells[a+1,4].Value:=sum2; //зачисление Range1.Cells[a+1,6].Value:=sum1; //кол-во платежей } end; StringGrid1.RowCount:=StringGrid1.RowCount-1; //E.Quit; end; |
![]() |
![]() |
![]() |
#2 |
Новичок
Джуниор
Регистрация: 09.04.2017
Сообщений: 2
|
![]()
Решилось просто:
sum2:=sum2+StrToFloat(Range2.Cells[b,9]); |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Excel Файл для общего доступа с правами просмотра | RailOS | Фриланс | 5 | 09.02.2016 23:53 |
RefEdit по 2 разным книгам | Thez | Microsoft Office Excel | 19 | 25.02.2014 17:43 |
Программирование по книгам | kopaevan | Помощь студентам | 5 | 11.04.2012 22:35 |
Проблемы с кирилицей для доступа к БД под Delphi XE | Prok186 | БД в Delphi | 3 | 04.07.2011 04:08 |
Из MS Excel XP в MS Excel 2008 for Mac, есть проблемы | O_H | Microsoft Office Excel | 0 | 27.09.2010 16:42 |