powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Простой вопрос по OLE2
11 сообщений из 11, страница 1 из 1
Простой вопрос по OLE2
    #38394325
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товарищи как мне подключить OLE2 для работы в 6 формсах?
Хочу открыть существующий Excel (локальный) и выгрузить туда данные, после чего запустить макрос на обработку и отображение...

Пользоваться хочу вот этим примером http://www.sql.ru/forum/108055/forms-6i-excel-kak-pisat-dannye-v-raznye-sheets?mid=820089#820089

Формс знаю слабо :-) поэтому прошу доходчиво подсказать куда и как жать чтобы подключить OLE2...

Спасибо.
...
Рейтинг: 0 / 0
Простой вопрос по OLE2
    #38394403
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, вопрос был дурацким. В итоге написал вот это:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
PROCEDURE ToExcel IS
  MyApp ole2.obj_type; 
  MyBook ole2.obj_type; 

  MyWorkbooksCollection ole2.obj_type; 
  myWorksheets ole2.obj_type; 
  mySheet ole2.obj_type; 
  myRange ole2.obj_type; 

  args OLE2.LIST_TYPE;

  var OLEVAR;
  id pls_integer;  
BEGIN
  MyApp:=OLE2.Create_Obj('Excel.Application'); 
  OLE2.Set_Property( MyApp,'VISIBLE', 1 ); 
  
  MyBook:=OLE2.Invoke_Obj( MyWorkbooksCollection,'Add' ); 
  myWorksheets:=OLE2.GET_OBJ_PROPERTY( MyBook,'Worksheets'); 
  
  args := OLE2.CREATE_ARGLIST; 
  OLE2.ADD_ARG( args, 1 ); 
  MySheet := OLE2.GET_OBJ_PROPERTY( myWorksheets, 'Item', args); 
  OLE2.DESTROY_ARGLIST( args);  
  
  args := OLE2.CREATE_ARGLIST; -- create argument list 
  OLE2.ADD_ARG( args, 1 ); 
  OLE2.ADD_ARG( args, 1 );
  myRange:=OLE2.GET_OBJ_PROPERTY( mySheet, 'Cells', args );
  OLE2.DESTROY_ARGLIST( args);
  
  var:=TO_VARIANT( 'Test' );
  id:=GET_OLE_MEMBERID( myRange, 'Value' );
  SET_OLE( myRange, id, var );
  DESTROY_VARIANT( var );
  OLE2.RELEASE_OBJ( myRange ); 
  
  OLE2.RELEASE_OBJ(mySheet); 
  OLE2.RELEASE_OBJ(myWorksheets); 
  OLE2.RELEASE_OBJ(MyBook); 
  OLE2.RELEASE_OBJ(MyWorkbooksCollection);
  OLE2.RELEASE_OBJ(MyApp); 
END;



В результате формсы открывают Excel а вот новую книгу не создают а следовательно вывод не работает...
В чем подвох?
...
Рейтинг: 0 / 0
Простой вопрос по OLE2
    #38394850
Петров Андрей,

вот эту строчку забыли скопировать из примера
MyWorkbooksCollection:=OLE2.GET_OBJ_PROPERTY( MyApp, 'Workbooks' );
...
Рейтинг: 0 / 0
Простой вопрос по OLE2
    #38394886
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага :-) ступил.
Все работает спасибо, но есть еще вопрос... Создал блок данных без видимых эжлементов чтобы по нему пройти в вывести данные в Excel. Но при обращении к нему вида:

go_block('data');
execute_query;
first_record;

Получаю сообщение FRM-40106 В назначеном блоке не элементов допускающих навигацию.

Как бы так пройти по теблице и вывести данные? :-) Может и блок данных не нужен а как то написать обычный цикл For R In (select ...) Loop?
...
Рейтинг: 0 / 0
Простой вопрос по OLE2
    #38394938
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все сделал, а вот запуск макроса не пашет - делаю вот так:

myTemp := OLE2.Invoke_Obj( MyBook,'Module1.FormatSheet' );

Как бы его вызвать то?
...
Рейтинг: 0 / 0
Простой вопрос по OLE2
    #38395122
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-это будет... RTFM.... Нет.... наверное STF /Search this forum/ )))

Forms 6 + excel, можно ли через ole2 скопировать лист?
...
Рейтинг: 0 / 0
Простой вопрос по OLE2
    #38395479
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, запустился, но упал, зараза. Буду разбираться дальше...

А как избавиться от Excel который остается висеть в процессах даже когда закрываешь его?
...
Рейтинг: 0 / 0
Простой вопрос по OLE2
    #38395516
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и до кучи.
Вызываю макрос отлаженый годами :-) и он падает вот на такой странной точке:

Код: vbnet
1.
2.
    ActiveWorkbook.Sheets("Stat").Activate
    ActiveSheet.Columns("L:L").NumberFormat = "General"



Говорит не может установить формат, чего не так может кто сталкивался?
...
Рейтинг: 0 / 0
Простой вопрос по OLE2
    #38395880
brig_2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Петров Андрей,

под рукой нет Excel, но помню, что у него есть метод Application.Quit или Applicarion.Exit - их надо обязательно вызывать при закрытии Excel. Они то и убирают Excel из памяти, а не ole2.realese_oobj (и предусмотреть вызов в блоке исключительных ситуаций). Иначе будет висеть у вас по несколько экземпляров незакрытых Excel.
...
Рейтинг: 0 / 0
Простой вопрос по OLE2
    #38395889
brig_2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Петров АндрейНу и до кучи.
Вызываю макрос отлаженый годами :-) и он падает вот на такой странной точке:

Код: vbnet
1.
2.
    ActiveWorkbook.Sheets("Stat").Activate
    ActiveSheet.Columns("L:L").NumberFormat = "General"



Говорит не может установить формат, чего не так может кто сталкивался?


этот вопрос направьте в форум Ms Office . И не забудьте уточнить версию Windows, Office и т.д., что помогло бы людям не выступать в разговоре с вами в роли телепатов.
...
Рейтинг: 0 / 0
Простой вопрос по OLE2
    #38396482
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
brig_2000Петров Андрей,

под рукой нет Excel, но помню, что у него есть метод Application.Quit или Applicarion.Exit - их надо обязательно вызывать при закрытии Excel. Они то и убирают Excel из памяти, а не ole2.realese_oobj (и предусмотреть вызов в блоке исключительных ситуаций). Иначе будет висеть у вас по несколько экземпляров незакрытых Excel.

Все намного хуже. Если в программе на Forms для любого объекта забыли вызвать ole2.release_obj (счетчик ссылок на какой нибудь объект не обнулится), то Excel исчезнет с экрана, но будет оставаться в памяти. Выход только один - аккуратно кодить )))
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Простой вопрос по OLE2
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]