Конференция "Corba" » значение ячейки excel, [D7, WinXP]
 
  • llrr4343 © (07.06.08 12:32) [0]
    Доброго времени суток!!!

    Задача оч проста, но проблема оч велика: как подключится к уже запущенному excel'ю БЕЗ СОЗДАНИЯ НОВОГО ПРОЦЕССА (есть - excel-процесс подключился и работает с активной книгой и листом, нету - ну и не больно то и хотелось). Есть похожий код, но он цепляет определенную открытую книгу, т.е. приложение работает, стоишь в определенной ячейке на кнопку нажимаешь показывается адрес текущей ячейки все гут, но открываешь еще один excel, и всплывает окно редактирование personals.xls запрещено, и дальнейшее нажатие на кнопку приводит к показу адреса ячейки, ранее открытого и не активного файла:

    procedure TForm1.Button1Click(Sender: TObject);
    const
     lcid = LOCALE_USER_DEFAULT;
    var XL: TExcelApplication;
    ASheet: TExcelWorksheet;
    i: Integer;
    begin
    begin
     // запускаем новый экземпляр Excel
     XL := TExcelApplication.Create(nil);
     XL.ConnectKind := ckRunningOrNew;
     ASheet := TExcelWorksheet.Create(Self);
     try
       XL.Connect; // подключение
     //  XL.AutoQuit := False; // по умолчанию это свойство True только в unit ExcelXP
     //  XL.Visible[lcid] := True;
     if XL.Workbooks.Count = 0 then begin
         // Excel не запущен или не открыта ни одна книга
         Exit;
       end;

    // ASheet.ConnectTo(xl.ActiveWorkbook.Application as _Worksheet);
      ASheet.ConnectTo(XL.ActiveSheet as _Worksheet);

       try

         with XL.Selection[lcid] as ExcelRange do
          // for i := 1 to Areas.Count do // мультиселект
          //   with Areas[i] do
          ShowMessageFmt('
    R%dC%d:R%dC%d',
                 [Row, Column, Row + Rows.Count - 1, Column + Columns.Count - 1]);

       except
         // Selection - это не Range!
       end;

       // здесь работаем с Excel'
    ем
     finally
       // отсоединяемся

       XL.UserControl := True; // отдадим управление пользователю
     //  XL.Quit; // закрыть Excel
       XL.Disconnect;
       FreeAndNil(XL);
     end;

    end;
    end;



    Как его подрехтовать, чтобы выбрал ячейку, нажал на кнопку (один раз) и он показал адрес текущей ячейки активной открытой книги, не зависимо когда она была открыта до запуска приложения или после?

    Заранее большое человеческое спасибо
  • koss (07.06.08 15:25) [1]
    ....
    Uses ComObj;
    var Xl:Variant;
    ....
    try
    XL:=GetActiveOleObject('Excel.Application');
    .......
    XL.visible:=true;
    Except
     XL:=CreateOleObject('Excel.Application');
     ......
     XL.visible:=true;
    end;

    подключение к Excel, если Excel запущен подключаемся к нему, если нет,
    то запускаем, а там уже все остальное...
 
Конференция "Corba" » значение ячейки excel, [D7, WinXP]
Есть новые Нет новых   [120361   +44][b:0][p:0.001]