Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2017, 01:53   #1
Yusk
Новичок
Джуниор
 
Аватар для Yusk
 
Регистрация: 09.04.2017
Сообщений: 2
По умолчанию Проблемы доступа к книгам Excel

Помогите понять в чем ошибка, и что я делаю не так. Задача, которую хочу решить заключается в следующем: из файла "А" получаю код файла-расшифровки, дату платежа и сумму. По полученному из этого файла коду открываю файл-расшифровку того же типа и получаю от туда список платежей(от кого и сколько). Код работает, но один раз. Открывает оба файла, читает и получает нужную информацию и после первого же прохода выдает это: 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;
Yusk вне форума Ответить с цитированием
Старый 10.04.2017, 20:56   #2
Yusk
Новичок
Джуниор
 
Аватар для Yusk
 
Регистрация: 09.04.2017
Сообщений: 2
По умолчанию

Решилось просто:

sum2:=sum2+StrToFloat(Range2.Cells[b,9]);
Yusk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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