Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить открытую книгу Excel по имени 
V
    Опции темы
MadMas
Дата 28.1.2009, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



Есть несколько открытых книг Excel. Необходимо подключиться к одной из них (известно имя книги).
Код

  XL.ConnectKind := ckRunningInstance;
  XL.Connect; 
  XL.AutoQuit := False; 
  XL.Interactive[lcid] := true;
  XL.UserControl := True;
  XL.ScreenUpdating[lcid] := False; 
   for i:=1  to XL.Workbooks.Count do
   begin
      if XL.Workbooks.Item[i].Name='Книга1' then
      begin
      str:='yes';
      break;
      end
      else str:='fail!'
   end;


XL.Workbooks.Count почему-то все время равен 0. 

что не так, а? Во время выполнения открытые книги есть. 
PM   Вверх
Rrader
  Дата 28.1.2009, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 6
Всего: 191



Есть подозрение на это:
Цитата

There is a MSKB article on this somewhere - what is probably actually happening is that a new hidden excel application is being created which has no workbooks open.



--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
MadMas
Дата 28.1.2009, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



Delphi - 7. офис - 2003 SP3. 

Вроде убила все процессы Excel, открыла книгу, запустила по новой. То что одна книга открыта - определилось, но вот название получать не хочет ни в какую. 

Причем не понятно как избавиться от ошибки с тем что не определяется ни одна книга - каким образом отследить что у пользователя не запущены "лишние" процессы?

Код

var xl: TExcelApplication;
    ASheet: TExcelWorksheet;
    AWorkBook: TExcelWorkbook;
    i:byte;
    str: string;
begin
xl:=TExcelApplication.Create(nil);
try
  XL.ConnectKind := ckRunningInstance; //присоединяемся к открытому процессу экселя
  {ckRunningInstance ckRunningInstance}
  XL.Connect; //подключаемся
  XL.AutoQuit := False; //автозакрытие экселя нам тоже не нужно
  XL.Interactive[lcid] := true; //разрешаем пользователю работать с этим экземляром excel -- сомнительно
  XL.UserControl := True;
  XL.ScreenUpdating[lcid] := False; //ЗАПРЕЩАЕМ ПЕРЕРИСОВКУ ЭКРАНА ДЛЯ УСКОРЕНИЯ РАБОТЫ
//подключаемся к открытой книге. имя книги из объекта настроек (ОН)
   if XL.Workbooks.Count=0 then ShowMessage('Нет ни одной открытой книги Excel!') else
   begin
       for i:=1  to XL.Workbooks.Count do
       begin
          if XL.Workbooks.Item[i].Name=St.BookName then
          begin
          str:='yes';
          break;
          end
          else str:='fail!'
       end;
   end;
//взять даные из листа эксель в объект расчеты

finally
 //отключаемся от экселя
 XL.UserControl := True; //отдали управление пользователю
 XL.Disconnect; //отключились
 FreeAndNil(XL); //освободили память
end;


Под отладчиком XL.Workbooks.Item[i].Name все время "Expression illegal in evaluator". :(

PM   Вверх
Данкинг
Дата 28.1.2009, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 5
Всего: 130



MadMas, а если подключаться через "createoleobject('excel.application')" ?



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
MadMas
Дата 28.1.2009, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



Через OLE работает. Ладно, пусть тогда так.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0436 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.