Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите получить доступ к вкладке Excel листа, Как определить цвет вкладки листа в Exce 
V
    Опции темы
Yuran59
Дата 25.1.2011, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.1.2011
Где: г. Москва

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



Доброго всем время суток!!!

Помогите плиз получить доступ к вкладке объекта ExcelSheet из программы, написанной на Builder, необходимо 
поменять цвет фона имени текущего листа.

На VBA этот код выглядит так - "ActiveWorkbook.Sheets("Лист2").Tab.ColorIndex = 3"


Нужно адаптировать эту строку к  программе, написанной на Builder.


PM MAIL   Вверх
xvr
Дата 25.1.2011, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Код

Variant ExcelApp=...
ExcelApp.OlePropertyGet("ActiveWorkbook").OleProperyGet("Sheets","Лист2").OlePropertyGet("Tab").OlePropertySet("ColorIndex",3);
как то так
Если используются враперы с закладки Office для Excel - то для них напрямую:
Код

ExcelApp->ActiveWorkbook->Sheets["Лист2"]->Tab->ColorIndex=3;


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


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.1.2011
Где: г. Москва

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



Цитата(xvr @  25.1.2011,  11:48 Найти цитируемый пост)
Если используются враперы с закладки Office для Excel - то для них напрямую:

код C++ Builder
1:

ExcelApp->ActiveWorkbook->Sheets["Лист2"]->Tab->ColorIndex=3;


Спасибо Вам за отзывчивость!

Использую сом_компоненты, т.е. этот вариант.

Дело в том,что св-во Tab не является св-вом класса Sheets, указатель, на который возвращает ...->Sheets["Лист2"]

p.s. работаю с Builder 6.0


Это сообщение отредактировал(а) Yuran59 - 25.1.2011, 12:39
PM MAIL   Вверх
xvr
Дата 25.1.2011, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Немного не так, Sheets["Лист2"] делать нельзя. Надо как то так Sheets->Items["Лист2"] (или похоже, надо разбираться)


PM MAIL   Вверх
Yuran59
Дата 25.1.2011, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.1.2011
Где: г. Москва

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



Цитата(xvr @  25.1.2011,  13:34 Найти цитируемый пост)
Немного не так, Sheets["Лист2"] делать нельзя. Надо как то так Sheets->Items["Лист2"] (или похоже, надо разбираться)



К сожалению и так. как Вы написали не получается!

Sheets->get_Items( Variant idx ) - возвращает указатель на интерфейс Idispatch, который, как и его потомки, не имеет ни св-ва , ни ф-ции, которые бы возвращали указатель или ссылку на вкладку!!!

Обращаю внимание, что в библиотеке Builder имеется два заголовачных ф-ла : excel_2k.h и excel_2k_srv.h, где описаны интерфейс и классы для работы с excel, и там в Родительском классе TOleServer не предусмотрен интерфейс для возврата указателя на вкладку, но имеются
два аналогичных заголовачных ф-ла(excel_xp.h и excel_xp_srv.h), где предусмотрена ф-ция get_Tab(), возвращающая указатель на вкладку!


По умолчанию, при добавления компонента, для работы с excel, в проект Builder включает для работы заголовки - excel_2k.h и excel_2k_srv.h(либо excel_97k.h и excel_97k_srv.h), но ни excel_xp.h и excel_xp_srv.h.



Разобраться, как с этим работать, не могу, поэтому прошу помощи!!!

PM MAIL   Вверх
xvr
Дата 25.1.2011, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



При установке BCB он спрашивает врапперы для какой версии оффиса устанавливать. *_2k - это врапперы для Оффиса 2000, *_xp - для Оффиса XP. Как ему переставить версию на уже развернутом BCB я не в курсе.
По всей видимости в Оффисе 2000 этих пропертей просто еще не было

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


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.1.2011
Где: г. Москва

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



Цитата(xvr @  25.1.2011,  16:08 Найти цитируемый пост)
При установке BCB он спрашивает врапперы для какой версии оффиса устанавливать. *_2k - это врапперы для Оффиса 2000, *_xp - для Оффиса XP. Как ему переставить версию на уже развернутом BCB я не в курсе.
По всей видимости в Оффисе 2000 этих пропертей просто еще не было




Возможно Вы правы, попробую завтра переустановить ВСВ, получится ли - отпишу позже. 

Спасибо!
PM MAIL   Вверх
xvr
Дата 25.1.2011, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Yuran59 @  25.1.2011,  14:20 Найти цитируемый пост)
Sheets->get_Items( Variant idx ) - возвращает указатель на интерфейс Idispatch, который, как и его потомки, не имеет ни св-ва , ни ф-ции, которые бы возвращали указатель или ссылку на вкладку!!!
Преобразуйте его сами:
Код

_WorksheetPtr sheet(Sheets->get_Items("Лист2"));
sheet->Tab->...



Это сообщение отредактировал(а) xvr - 25.1.2011, 16:18
PM MAIL   Вверх
migddk
Дата 25.1.2011, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот файлик для работы с Exel. smile 

Цитата

Как ему переставить версию на уже развернутом BCB я не в курсе.

На закладке установке и удаления компонентов отключить не нужный пакет и подключить нужный. 
Какой пакет выбран при установке не важно, у меня присутсвуют оба.

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  exel.rar 3,01 Kb
PM MAIL   Вверх
Yuran59
Дата 26.1.2011, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.1.2011
Где: г. Москва

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



Цитата(xvr @  25.1.2011,  16:17 Найти цитируемый пост)
код C++ Builder
1:
2:

_WorksheetPtr sheet(Sheets->get_Items("Лист2"));
sheet->Tab->...


Het смысла приводить указатель к _WorksheetPtr, т.к. интерфейс TComInterface, на который как раз ссылается _[B]WorksheetPtr[/B - не возвращает ссылку или указатель на вкладку!!!

Добавлено через 4 минуты и 59 секунд
Цитата(migddk @  25.1.2011,  21:41 Найти цитируемый пост)
Вот файлик для работы с Exel.  


Цитата

Как ему переставить версию на уже развернутом BCB я не в курсе.



На закладке установке и удаления компонентов отключить не нужный пакет и подключить нужный. 
Какой пакет выбран при установке не важно, у меня присутсвуют оба. 



Спасибо за файлик, посмотрю его попозже, сейчас нет времени.


ВСВ переустановил, при установке выяснилось, что выбор не велик - либо Оффис 97, либо 2000 и усё, к сожалению.

Добавлено через 11 минут и 16 секунд
Цитата(migddk @  25.1.2011,  21:41 Найти цитируемый пост)
На закладке установке и удаления компонентов отключить не нужный пакет и подключить нужный. 
 



Можно поподробнее про это. 
PM MAIL   Вверх
xvr
Дата 26.1.2011, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Yuran59 @  26.1.2011,  14:01 Найти цитируемый пост)
Het смысла приводить указатель к _WorksheetPtr, т.к. интерфейс TComInterface, на который как раз ссылается _WorksheetPtr - не возвращает ссылку или указатель на вкладку!!!
У него перегружен оператор -> который возвращает указатель на _Worksheet, в котором как раз и находится 
  __property   Excel_xp::Tab*  Tab = {read = get_Tab};


PM MAIL   Вверх
Yuran59
Дата 27.1.2011, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.1.2011
Где: г. Москва

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



Цитата(xvr @  26.1.2011,  16:18 Найти цитируемый пост)
У него перегружен оператор -> который возвращает указатель на _Worksheet, в котором как раз и находится 
  __property   Excel_xp::Tab*  Tab = {read = get_Tab};


 Excel_xp::

Как только я поместил в проект СОМ - компонент TApplicationExcel  или  TexcelWorksheet Builder автоматом включает заголовочные ф-лы
 Excel_2k.h и Excel_2k_srv.h, а не Excel_xp.h и Excel_xp_srv.h, где описан интерфейс, возвращающий ссылку и(или)  указатель на вкладку!

Включить в проект оба ф-ла(Excel_2k_srv.h и Excel_xp_srv.h)  мне не удается, кто знает, как это сделать - подскажите пожалуйста!!!

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


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Yuran59 @  27.1.2011,  08:48 Найти цитируемый пост)
Как только я поместил в проект СОМ - компонент TApplicationExcel  или  TexcelWorksheet Builder автоматом включает заголовочные ф-лы
 Excel_2k.h и Excel_2k_srv.h,

Это не те компоненты  smile 

Компоненты от Оффиса 97 и 2000 лежат в пакетах bcb97axserver60.bpl и bcb2kaxserver60.bpl (в папке CBuilder6\bin) и один из них подключен в Components->Install Packages->Design Packages: Borland C++ Builder COM Server Components Sample Package

К сожалению откомпилированного пакета для Офиса XP я не нашел (видимо в дистрибутиве его нет), но сорцы всех этих пакетов лежат в CBuilder6\Source\ComServers\ Office97,Office2K,OfficeXP

Так что видимо придется собрать пакет вручную (bpk файла тоже нет, так что придется его сделать самому: File->New->Other->Package) и установить (Components->Install Packages->Add)


PM MAIL   Вверх
Yuran59
Дата 28.1.2011, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.1.2011
Где: г. Москва

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



Всем, принимающим участие, в данном топике Огромное спасибо!

Вопрос решен, путем написания кода на "OLE Variantе". Просто этот способ для меня менее предпочтителен, ранее пользовал СОМ серверные компоненты, но как показывает практика на ВСВ 6.0 при работе с ними есть трудности!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

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

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

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


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




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


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

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