Комбинирование компонентов ActiveX и xl-функций в интерфейса
Модераторы: m0p3e, edward_K, Модераторы
-
- Местный житель
- Сообщения: 474
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Сибирь-матушка
- Контактная информация:
Комбинирование компонентов ActiveX и xl-функций в интерфейса
Кто-нибудь глубоко прорабатывал тему subj'а ?
Когда в окне ГАЛАКТИКИ создается ActiveX Excel.Sheet через OleCreate,биндится к контейнеру и к нему подцепляешься через xlOpenExcel(т.к. создана компонента и есть экземпляр приложения, то и подцепление к происходит к этому экзепляру согласно описания), заполняя его данными через xl-функции ?
Интересует следующий момент - как-нибудь можно полученный в окне документ строить изначально не с нуля, а с шаблона ?
Функция xlCreateExcelFromTemplate, не смотря на описание ее поведения, почему-то в данном случае не хочет подцепляться к экземпляру приложения, в отличие от xlOpenExcel, создавая отдельное окно ...
У объекта Excel.Sheet не смог найти методов по открытию файла ...
в общем , heeelp !!! ???
Когда в окне ГАЛАКТИКИ создается ActiveX Excel.Sheet через OleCreate,биндится к контейнеру и к нему подцепляешься через xlOpenExcel(т.к. создана компонента и есть экземпляр приложения, то и подцепление к происходит к этому экзепляру согласно описания), заполняя его данными через xl-функции ?
Интересует следующий момент - как-нибудь можно полученный в окне документ строить изначально не с нуля, а с шаблона ?
Функция xlCreateExcelFromTemplate, не смотря на описание ее поведения, почему-то в данном случае не хочет подцепляться к экземпляру приложения, в отличие от xlOpenExcel, создавая отдельное окно ...
У объекта Excel.Sheet не смог найти методов по открытию файла ...
в общем , heeelp !!! ???
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Комбинирование компонентов ActiveX и xl-функций в интерф
1. не используй два раза
xlCrea* xlOpen* до закрытия предыдущего сеанса xlkillExcel
2. при повторном иногда плющит, особенно если использовал функции копирования блока.
3.я так использую исключительно xlCreateExcelFromTemplate соблюдая выше указанные условия.
4.всегда есть возможность использовать макросы через xlRunMacro, только не забудь потом активизировать снова нужный лист.
xlCrea* xlOpen* до закрытия предыдущего сеанса xlkillExcel
2. при повторном иногда плющит, особенно если использовал функции копирования блока.
3.я так использую исключительно xlCreateExcelFromTemplate соблюдая выше указанные условия.
4.всегда есть возможность использовать макросы через xlRunMacro, только не забудь потом активизировать снова нужный лист.
Re: Комбинирование компонентов ActiveX и xl-функций в интерф
Похоже, что xlOpenExcel это тот-же xlCreateExcelFromTemplate,но на шаблоне по умолчанию.
Если отчет черезчур нарядный, то я делаю так:
-создаю шаблон отчета в Excel с нарядностями, включая с форматированием данных
-пишу код с xl-функциями по заполнению этого отчета
-пишу макросы в Excel-е по форматированию (копирование формата) данных
после отладки шаблон ??.xls кидаю в AllMemo а
то,что VBA вставляю в VIP
Итог: Выгружаешь из AllMemo Шаблон, заполняешь его данными, вываливаешь в текст VBA-код, импортируешь эти макросы в Excel и выполняешь их.
Если отчет черезчур нарядный, то я делаю так:
-создаю шаблон отчета в Excel с нарядностями, включая с форматированием данных
-пишу код с xl-функциями по заполнению этого отчета
-пишу макросы в Excel-е по форматированию (копирование формата) данных
после отладки шаблон ??.xls кидаю в AllMemo а
то,что VBA вставляю в VIP
Итог: Выгружаешь из AllMemo Шаблон, заполняешь его данными, вываливаешь в текст VBA-код, импортируешь эти макросы в Excel и выполняешь их.
-
- Местный житель
- Сообщения: 474
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Сибирь-матушка
- Контактная информация:
Re: Комбинирование компонентов ActiveX и xl-функций в интерф
Народ, вы не так поняли ...
просто хотелось , чтобы 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-отчеты в родных интерфейсах Галк-ки, не переключаясь .
В общем , что посоветуете граждане ?
просто хотелось , чтобы 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 !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
-
- Местный житель
- Сообщения: 783
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
Re: Комбинирование компонентов ActiveX и xl-функций в интерф
Олег, такие глубокие и бесчеловечные идеи с опытами над БД "Галактика" могут прийти в голову тока тебе
-
- Абориген
- Сообщения: 943
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: External Developer
- Контактная информация:
Re: Комбинирование компонентов ActiveX и xl-функций в интерф
Такие "глубокие и бесчеловечные идеи с опытами над БД "Галактика"" приходят время от времени всем нам... я вот третью неделю думаю как мне извратиться с MS Word шоб с евойными документами подобно Excel-у работать. Ну не прикалывает меня RTF - больно здоровенный получается - в мемо долго записывается и места много жрет...
Re: Комбинирование компонентов ActiveX и xl-функций в интерф
Раз с OleCreate работает, может тогда попробовать:
function OleCreateFromFile (
const aFileName : String
) : LongInt;
сам не пробывал - мне пофиг где у юзера отчет появится.
function OleCreateFromFile (
const aFileName : String
) : LongInt;
сам не пробывал - мне пофиг где у юзера отчет появится.
-
- Местный житель
- Сообщения: 474
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Сибирь-матушка
- Контактная информация:
Re: Комбинирование компонентов ActiveX и xl-функций в интерф
Таки не работает, написать ить ...
ExOleCantCreateObject Exception дает ...
ExOleCantCreateObject Exception дает ...
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
-
- Абориген
- Сообщения: 943
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: External Developer
- Контактная информация:
Re: Комбинирование компонентов ActiveX и xl-функций в интерф
Олег, встречный вопрос - не пробовал реализовать собственные функции доступа данным екселя, используя библиотеки внешних функций для работы галки с экселем? мож проблема в том, что стандартная реализация инициализации Excel.Application как OLEобъекта - мал мала кривовато прописана?
-
- Местный житель
- Сообщения: 474
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Сибирь-матушка
- Контактная информация:
Re: Комбинирование компонентов ActiveX и xl-функций в интерф
Руки пока не доходили
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
-
- Местный житель
- Сообщения: 589
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Воронеж ОАО Верофарм. Воронеж
Re: Комбинирование компонентов ActiveX и xl-функций в интерф
Вопрос к Goblin:
что, прям все работает?
У меня аналогичный код приводит к следующим результатам (без всяких Template):
1. Остается зависший процесс EXCEL, который можно срубить только через закрытие процесса,
2. Не появляется вроде заявленный EXCEL-тулбар.
3. Сам лист Excel виден не весь в окне Гал-ки
4. При попытке вставить формулу в листе окно начинает многократно мигать (но формула вставляется и работает, дума какая-то перерисовка срабатывает, но где?).
Может я чего упустил?
Галактика 8.1.
Вообще очень надо создать фейс с прорисовкой диаграмм, решение с ActiveX было бы самым удачным, наверное.
Код фейса:
что, прям все работает?
У меня аналогичный код приводит к следующим результатам (без всяких 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
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Комбинирование компонентов ActiveX и xl-функций в интерф
в кадрах есть отчет с диаграммой - отчеты по комплектованию - статистические - сводный график приема увольнения
-
- Местный житель
- Сообщения: 589
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Воронеж ОАО Верофарм. Воронеж
Re: Комбинирование компонентов ActiveX и xl-функций в интерф
Во-первых данный отчет у меня вообще не сформировался!
Во-вторых, даже если я его увижу на экране, я что, смогу увидеть его вип-код?
Мне много чего своего надо ввести в отчет и хочется понять, как работает ActiveX, а по тому руководству, что у меня есть, что-то не ясно ничего.
Во-вторых, даже если я его увижу на экране, я что, смогу увидеть его вип-код?
Мне много чего своего надо ввести в отчет и хочется понять, как работает ActiveX, а по тому руководству, что у меня есть, что-то не ясно ничего.
-
- Местный житель
- Сообщения: 589
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Воронеж ОАО Верофарм. Воронеж
Re: Комбинирование компонентов ActiveX и xl-функций в интерф
Еще раз повторюсь, требуется открыть Excel ВНУТРИ фейса Галактики, как у Goblin'а, использовав ActiveX.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Комбинирование компонентов ActiveX и xl-функций в интерф
1. Для встраивания в галку есть galagraf - можно построить из любого текстового отчета, правда вид не очень, Excel лучше.
2. открыть окно excel в галке можно, но только тогда и все обращение должно идти к нему без xl-функций - напрямую ActiveX - OleCreate и иже с ними - поищите в vipprogr.chm.
3. А что именно ругалось при формировании отчета, про который написал.
2. открыть окно excel в галке можно, но только тогда и все обращение должно идти к нему без xl-функций - напрямую ActiveX - OleCreate и иже с ними - поищите в vipprogr.chm.
3. А что именно ругалось при формировании отчета, про который написал.