На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> Excel выдает ошибку "Invalid variant operation"
    Добрый день такая проблема при выполнении в Delphi следующего кода, происходит ошибка "Invalid variant operation":

    var excel: variant;
    fileexcel : string;
    Wbk: OleVariant;
    i: integer;
    sum : real;

    begin
    Excel:=CreateOleObject('Excel.Application');
    fileexcel:='D:\...\Blank_for_sign_test.xls';

    WBk:=Excel.WorkBooks.Open(FileExcel);
    excel.visible:=true;

    sum:=0;
    for i:=1 to 1000 do

    if Excel.ActiveWorkBook.WorkSheets[1].Cells[i+1, 4]=Excel.ActiveWorkBook.WorkSheets[2].Cells[2, 2] and
    Excel.ActiveWorkBook.WorkSheets[1].Cells[i+1, 5]=1 then
    begin
    sum:=sum+Excel.ActiveWorkBook.WorkSheets[1].Cells[i+1, 8];
    end;
    end;
    Как я понял не нравиться ему мой "sum", а чего, понять уже не могу (((
    Прошу вашей помощи, заранее спасибо
    Сообщение отредактировано: bas_sanya -
      Скорее всего в одной из ячеек у тебя не число :)
      Смотри на разделители дробной части.
        да и смотри чтоб ячейка не была пустой...
          На сколько я могу судить по своему опыту ты сдорово портачишь.
          Дело в том что как ни крути Excel реальные данные из ячейки ты ни когда не получишь.
          Максимум чего можно достичь это получить объект Range. А вот через него ты можешь читать и писать и вообще делать все что хочешь с ячейкой. В твоем коде отсутсвует после Cells[1,2]. , а далее то что ты хочешь получить. Потому как Cells, если зайти в VBA и посмотреть объектную модель, возращает Range. А вот у него можно уже взять Value т.е. содержимое ячейки.
          Т.е. ... .Cells[1,2].Value
          Вот пример моего метода.


          procedure TFunctionBase.SheetInvestorSave(Investor: TInvestorWorking);
          var
          SheetNow : Variant; //лист рабочей книги
          Row : Integer;
          begin
          SheetNow := GetSheet(1); //Получаю ссылку на лист.
          Row := Investor.PersonInvestorData.ExcelProperty.Row;
          SheetNow.Cells[Row,1].Value := Investor.PersonInvestorData.IdentNum;
          SheetNow.Cells[Row,2].Value := Investor.PersonInvestorData.FIO.FirstName;
          SheetNow.Cells[Row,3].Value := Investor.PersonInvestorData.FIO.NextName;
          SheetNow.Cells[Row,4].Value := Investor.PersonInvestorData.FIO.LastName;
          SheetNow.Cells[Row,5].Value := Investor.PersonInvestorData.Address.PostIndex;
          SheetNow.Cells[Row,6].Value := Investor.PersonInvestorData.Address.City;
          SheetNow.Cells[Row,7].Value := Investor.PersonInvestorData.Address.Street;
          SheetNow.Cells[Row,8].Value := Investor.PersonInvestorData.Address.House;
          SheetNow.Cells[Row,9].Value := Investor.PersonInvestorData.Address.Flat;
          SheetNow.Cells[Row,10].Value := Investor.PersonInvestorData.Pasport.Series;
          SheetNow.Cells[Row,11].Value := Investor.PersonInvestorData.Pasport.Number;
          SheetNow.Cells[Row,12].Value := Investor.PersonInvestorData.Pasport.Getdepartment;
          SheetNow.Cells[Row,13].Value := Investor.PersonInvestorData.Pasport.City;
          SheetNow.Cells[Row,14].Value := Investor.PersonInvestorData.Pasport.GetDate;
          SheetNow.Cells[Row,15].Value := Investor.PersonInvestorData.TelefonContct.Cellular;
          SheetNow.Cells[Row,16].Value := Investor.PersonInvestorData.TelefonContct.TelephoneWorke;
          SheetNow.Cells[Row,17].Value := Investor.PersonInvestorData.TelefonContct.TelephoneHome;
          SheetNow.Cells[Row,18].Value := Investor.PersonInvestorData.Commentary;

          end;

          Investor. - это типизированная переменная. Все поля в основном string

          function TFunctionBase.GetSheet(i: Integer): Variant; //Получение нужного листа рабочей книги.
          var
          SheetActNow : Sheets;
          begin
          SheetActNow := ExcelWorkbook.Sheets;
          Result := SheetActNow.Item[i];
          end;

          Я работаю через сервера автоматизации. Там методы видны. Пишут, что более универсальный способ.

          Либо есть еще доступ к ячейкам через метод Item[row,Column] помоему свойство листа.
            Спасибо большое,за объяснения, теперь мне все понятно
            спасибо за то что не пожалели времени на написание ответа!!
            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0201 ]   [ 15 queries used ]   [ Generated: 16.06.25, 20:07 GMT ]