Комбинирование компонентов ActiveX и xl-функций в интерфейса

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Goblin
Местный житель
Сообщения: 474
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь-матушка
Контактная информация:

Комбинирование компонентов ActiveX и xl-функций в интерфейса

Сообщение Goblin »

Кто-нибудь глубоко прорабатывал тему subj'а ?
Когда в окне ГАЛАКТИКИ создается ActiveX Excel.Sheet через OleCreate,биндится к контейнеру и к нему подцепляешься через xlOpenExcel(т.к. создана компонента и есть экземпляр приложения, то и подцепление к происходит к этому экзепляру согласно описания), заполняя его данными через xl-функции ?

Интересует следующий момент - как-нибудь можно полученный в окне документ строить изначально не с нуля, а с шаблона ?

Функция xlCreateExcelFromTemplate, не смотря на описание ее поведения, почему-то в данном случае не хочет подцепляться к экземпляру приложения, в отличие от xlOpenExcel, создавая отдельное окно ...

У объекта Excel.Sheet не смог найти методов по открытию файла ...

в общем , heeelp !!! ???
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Комбинирование компонентов ActiveX и xl-функций в интерф

Сообщение edward_K »

1. не используй два раза
xlCrea* xlOpen* до закрытия предыдущего сеанса xlkillExcel
2. при повторном иногда плющит, особенно если использовал функции копирования блока.
3.я так использую исключительно xlCreateExcelFromTemplate соблюдая выше указанные условия.
4.всегда есть возможность использовать макросы через xlRunMacro, только не забудь потом активизировать снова нужный лист.
IStep
Сообщения: 18
Зарегистрирован: 29 мар 2005, 17:49
Откуда: 33

Re: Комбинирование компонентов ActiveX и xl-функций в интерф

Сообщение IStep »

Похоже, что xlOpenExcel это тот-же xlCreateExcelFromTemplate,но на шаблоне по умолчанию.
Если отчет черезчур нарядный, то я делаю так:
-создаю шаблон отчета в Excel с нарядностями, включая с форматированием данных
-пишу код с xl-функциями по заполнению этого отчета
-пишу макросы в Excel-е по форматированию (копирование формата) данных

после отладки шаблон ??.xls кидаю в AllMemo а
то,что VBA вставляю в VIP
Итог: Выгружаешь из AllMemo Шаблон, заполняешь его данными, вываливаешь в текст VBA-код, импортируешь эти макросы в Excel и выполняешь их.
Goblin
Местный житель
Сообщения: 474
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь-матушка
Контактная информация:

Re: Комбинирование компонентов ActiveX и xl-функций в интерф

Сообщение Goblin »

Народ, вы не так поняли ...
просто хотелось , чтобы Excel'евский отчет был в окне Гал-ки ...
Для этого и создаю компоненту ActiveX Excel.Sheet, подключаю ее к панели в интерфейсе, подцепляюсь к процессу Excel, обслуживающему данную компоненту, и передаю данные, отключаюсь от Excel - работает как часы, лист Excel в окне Гал-ки, переключаться никуда не нужно. Но это в том случае если подключение к процессу идет через функцию xlOpenExcel. А вот если вместо(а не вместе с ней :) ) нее использовать xlCreateExcelWithTemplate получаем пустой лист Excel в окне Гал-ки и еще отдельное нефокусируемое окно Excel c файлом из шаблона, которое становится доступным только после закрытия моего окна-контейнера листа Excel в Гал-ке.
Вот простой пример

const
ooAllowActiveDoc = 1;
ooAllowInPlace = 2;
ooAllowDirectPaint = 4;
end;

interface ActiveX;
create view;

var Sheet:longint;

Embedded emObj1 OLE cache=preload;
End;

handleevent
cminit:
{
var i:boolean;
Sheet:=OleCreate('Excel.Sheet'); //Создаем лист
if(Sheet>0)
{
OleSetOptions(Sheet,ooAllowInPlace +ooAllowActiveDoc +ooAllowDirectPaint );
OleEmbed(Sheet,emobj1); //Присоединяем его к панели
}
//Подключаемся к экзепляру Excel
xlOpenExcel(true);
//Передаем данные
xlSetCellStringValue('А',1,1,5,5);
//Отключаемся от Excel и наслаждаемся видом нашего отчета в окне Гал-ки
xlKillExcel;
}
cmDone:
{
if(Sheet>0) OleDestroy(Sheet);
}
end;
end.

в данном случае если заменить xlOpenExcel на xlCreateExcelWithTemplate - то ничего хорошего не выйдет, последствия я описал ...
Выходя видится три - либо сначала использовать xlCreateExcelWithTemplate и потом получив longint дескриптор процесса попытаться его вписать в панель окна Гал-ки - но нет функции такой Excellib.Dll(точнее они были - XLGETEXAPPID, XLGETWBOOKID и XLGETWSHEETID , но при сборке их закоментарили, как выяснилось ), либо попытаться помучать методы и свойства самого Excel.Sheet(перерыл весь Excel.exe как библиотеку типов в Builder'е - ничего не нашел в куче свойств, видимо ошибка у меня в ДНК), либо использовать вместо OleCreate с указанием конкретной компоненты метод OleCreateFromFile, когда уже система подбирает по типу файла компоненту(ExOleCantCreateObject Exception получаем ) - в общем ни один из выходов пока не работает. А идея , по-моему, достойная - дать юзеру видеть Excel-отчеты в родных интерфейсах Галк-ки, не переключаясь .
В общем , что посоветуете граждане ?
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Deinis
Местный житель
Сообщения: 783
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Re: Комбинирование компонентов ActiveX и xl-функций в интерф

Сообщение Deinis »

Олег, такие глубокие и бесчеловечные идеи с опытами над БД "Галактика" могут прийти в голову тока тебе ;) :P
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Re: Комбинирование компонентов ActiveX и xl-функций в интерф

Сообщение Maverick »

Такие "глубокие и бесчеловечные идеи с опытами над БД "Галактика"" приходят время от времени всем нам... я вот третью неделю думаю как мне извратиться с MS Word шоб с евойными документами подобно Excel-у работать. Ну не прикалывает меня RTF - больно здоровенный получается - в мемо долго записывается и места много жрет...
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
IStep
Сообщения: 18
Зарегистрирован: 29 мар 2005, 17:49
Откуда: 33

Re: Комбинирование компонентов ActiveX и xl-функций в интерф

Сообщение IStep »

Раз с OleCreate работает, может тогда попробовать:

function OleCreateFromFile (
const aFileName : String
) : LongInt;

сам не пробывал - мне пофиг где у юзера отчет появится.
Goblin
Местный житель
Сообщения: 474
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь-матушка
Контактная информация:

Re: Комбинирование компонентов ActiveX и xl-функций в интерф

Сообщение Goblin »

Таки не работает, написать ить ...
ExOleCantCreateObject Exception дает ...
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Re: Комбинирование компонентов ActiveX и xl-функций в интерф

Сообщение Maverick »

Олег, встречный вопрос - не пробовал реализовать собственные функции доступа данным екселя, используя библиотеки внешних функций для работы галки с экселем? мож проблема в том, что стандартная реализация инициализации Excel.Application как OLEобъекта - мал мала кривовато прописана?
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Goblin
Местный житель
Сообщения: 474
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь-матушка
Контактная информация:

Re: Комбинирование компонентов ActiveX и xl-функций в интерф

Сообщение Goblin »

Руки пока не доходили
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Комбинирование компонентов ActiveX и xl-функций в интерф

Сообщение savov »

Вопрос к Goblin:
что, прям все работает?
У меня аналогичный код приводит к следующим результатам (без всяких Template):
1. Остается зависший процесс EXCEL, который можно срубить только через закрытие процесса,
2. Не появляется вроде заявленный EXCEL-тулбар.
3. Сам лист Excel виден не весь в окне Гал-ки
4. При попытке вставить формулу в листе окно начинает многократно мигать (но формула вставляется и работает, дума какая-то перерисовка срабатывает, но где?).
Может я чего упустил?

Галактика 8.1.

Вообще очень надо создать фейс с прорисовкой диаграмм, решение с ActiveX было бы самым удачным, наверное.

Код фейса:

Код: Выделить всё

Interface KartX 'Карта среднего ' (,,) blue;
 show at (2,2,250,220);

const
ooAllowActiveDoc = 1;
ooAllowInPlace = 2;
ooAllowDirectPaint = 4;
end;

var l : longInt;



// описание панели для внедрения
embedded emObj1 OLE;
  show at (1,1,,);
  toolBar tbObj;
end;

procedure MakeMyObj1;
begin
  l := OleCreate ('Excel.Sheet');
  if l = 0 then
    exit;
  // связывание объекта и site'а
  OleSetOptions(l,ooAllowInPlace+ooAllowActiveDoc+ooAllowDirectPaint);
  OleEmbed (l, emObj1);

end;

handleevent
CmInit:
{
 MakeMyObj1;
 xlOpenExcel(true);
 xlKillExcel;
}
cmDefault:
{
  if (l>0) then
  {
   OleDestroy(l)};
  closeInterface(cmOK);
}
end;



end. // interface
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Комбинирование компонентов ActiveX и xl-функций в интерф

Сообщение edward_K »

в кадрах есть отчет с диаграммой - отчеты по комплектованию - статистические - сводный график приема увольнения
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Комбинирование компонентов ActiveX и xl-функций в интерф

Сообщение savov »

Во-первых данный отчет у меня вообще не сформировался!
Во-вторых, даже если я его увижу на экране, я что, смогу увидеть его вип-код?
Мне много чего своего надо ввести в отчет и хочется понять, как работает ActiveX, а по тому руководству, что у меня есть, что-то не ясно ничего.
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Комбинирование компонентов ActiveX и xl-функций в интерф

Сообщение savov »

Еще раз повторюсь, требуется открыть Excel ВНУТРИ фейса Галактики, как у Goblin'а, использовав ActiveX.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Комбинирование компонентов ActiveX и xl-функций в интерф

Сообщение edward_K »

1. Для встраивания в галку есть galagraf - можно построить из любого текстового отчета, правда вид не очень, Excel лучше.
2. открыть окно excel в галке можно, но только тогда и все обращение должно идти к нему без xl-функций - напрямую ActiveX - OleCreate и иже с ними - поищите в vipprogr.chm.
3. А что именно ругалось при формировании отчета, про который написал.
Ответить