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

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

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

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

Код: 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
12.09.2013, 15:06
    #38394850
Простой вопрос по OLE2
Петров Андрей,

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

go_block('data');
execute_query;
first_record;

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

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

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

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

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

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

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



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

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

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



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


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

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

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


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