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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Excel вставка объекта из файла, как? 
:(
    Опции темы
FURANIUM
Дата 16.9.2010, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



День добрый.
Суть вопроса в следующем, начал готовить на Дельфи отчеты в Эксель. Все замечательно - импорт и экспорт данных с Экселем, форматирование текста, все на уровне, пока не решил включить в отчет объект из файла. Объект как правило схема, схема нарисована либо в Visio, либо в AutoCAD.
При решении вопроса поступил следющим образом: записал макрос вставки из файла в Экселе, посмотрел как устроен, решил адаптировать его под Дельфи и сразу возникла проблема, после осуществленной вставки объекта в Эксель в приложении Дельфи постоянно появляется ошибка "Вызов был отклонен", незнаю как решить.
Полагаю вопрос решается очень просто, но поверхностное познание материала не позволяет разрешить ситуацию.


Код

try //проверяем есть-ли объект 'Excel.Application'
   VExcel := GetActiveOleObject('Excel.Application'); 
  except
    on EOLESysError do
      VExcel := CreateOleObject('Excel.Application'); //нет, создаем
  end;


   VExcel.WorkBooks.Add(opendialog1.FileName); //открываем шаблон
   VExcel.WorkSheets[1].Activate; //активируем первый лист

   VExcel.ActiveSheet.Range['B12'].Select; //выделем ячейку, для того чтобы вставить объект с ячейки
   VExcel.ActiveSheet.OLEObjects.Add(Filename:='H:\FileName.vsd', Link:=True, DisplayAsIcon:=False).Select; //вставлем объект из файла
//далее сообщение об ошибке


Попутно возникли другие вопросы, которые появятся в перспективе с решением основного: 
1) Объект вставляется с уже имеющимися некими размерами, как узнать размеры этого объекта длинну и ширину?
2) Как установить произвольный размер по ширине/высоте, с пропорциональным произвольным размером по высоте/ширине?(схему небходимо разместить в ограниченных рамках, по высоте или ширине)
PM MAIL   Вверх
aleksh
Дата 16.9.2010, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



убрать ошибку о вызове можно двумя способами
1: запускать программу при закрытом екселе
2: в строчке добавления картинки убрать ".Select", почему так - не знаю, может некий конфликт контролов или нечто в этом роде

Добавлено через 6 минут и 51 секунду
и вот еще, там, наверняка, ответы на все связные вопросы
PM MAIL   Вверх
FURANIUM
Дата 17.9.2010, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(aleksh @ 16.9.2010,  17:39)
убрать ошибку о вызове можно двумя способами
1: запускать программу при закрытом екселе
2: в строчке добавления картинки убрать ".Select", почему так - не знаю, может некий конфликт контролов или нечто в этом роде

Добавлено @ 17:46
и вот еще, там, наверняка, ответы на все связные вопросы

aleksh, спасибо.
1) Можно подробнее об этом способе?
2) Убирание ".Select" действительно устраняет ошибку "Вызов был отклонен", но дальнейшая попытка обрадится к объекту снова приводит к ее появлению.
Ссылку посмотрел, много интересного, но как применить в данном случае информацию не додумал.
Может есть еще идеи у кого нибудь?
PM MAIL   Вверх
aleksh
Дата 17.9.2010, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(FURANIUM @  17.9.2010,  12:32 Найти цитируемый пост)
1) Можно подробнее об этом способе?

1 как подробней? если выполнять код с .select когда нет открытых xls файлов, то открывается ексель, в него вставляется картинка и она "выбрана"
2 а как обращаешься? к объекту можно обращаться после вставки и изменять его размеры
PM MAIL   Вверх
FURANIUM
Дата 17.9.2010, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(aleksh @ 17.9.2010,  13:07)
Цитата(FURANIUM @  17.9.2010,  12:32 Найти цитируемый пост)
1) Можно подробнее об этом способе?

1 как подробней? если выполнять код с .select когда нет открытых xls файлов, то открывается ексель, в него вставляется картинка и она "выбрана"
2 а как обращаешься? к объекту можно обращаться после вставки и изменять его размеры

1) Первый способ не подойдет, т.к. объект всавляется в шаблон
2) После просмотра макроса в Excel, пробовал обращаться как VExcel.ActiveSheet.Shape('Object 1').Select;
PM MAIL   Вверх
aleksh
Дата 17.9.2010, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(FURANIUM @  17.9.2010,  13:38 Найти цитируемый пост)
1) Первый способ не подойдет, т.к. объект всавляется в шаблон

а зачем тогда
Цитата(FURANIUM @  16.9.2010,  14:23 Найти цитируемый пост)
      VExcel := CreateOleObject('Excel.Application'); //нет, создаем


PM MAIL   Вверх
FURANIUM
Дата 17.9.2010, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(aleksh @ 17.9.2010,  14:45)
Цитата(FURANIUM @  17.9.2010,  13:38 Найти цитируемый пост)
1) Первый способ не подойдет, т.к. объект всавляется в шаблон

а зачем тогда
Цитата(FURANIUM @  16.9.2010,  14:23 Найти цитируемый пост)
      VExcel := CreateOleObject('Excel.Application'); //нет, создаем

Видимо я тут немножко не в теме, не совсем пойму. Но всеравно спасибо.

И выяснилось замена Link:=True на Link:=False
Код

VExcel.ActiveSheet.OLEObjects.Add(Filename:='H:\FileName.vsd', Link:=False, DisplayAsIcon:=False).Select; 

Избавляет от ошибки при добавлении объекта, но не избавляет от ее появления в дальнейшем

Вобщем посоветовали мне использовать ранее связывание, и все получилось.
Проблема, как понял, была в различных подходах к решению задачи, и мной был выбран не совсем верный способ.


Это сообщение отредактировал(а) FURANIUM - 17.9.2010, 15:09
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0458 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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