Текущее время: Пт, июл 18 2025, 19:00

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Как в Excel ч/з OLE найти метку ячейки?
СообщениеДобавлено: Чт, мар 09 2006, 16:23 
Менеджер
Менеджер

Зарегистрирован:
Вт, дек 06 2005, 17:52
Сообщения: 559
В листе есть ячейка с меткой be_txt. Почему не удается найти ее таким кодом и присвоить значение? Что-то очень простое должно быть...

Код взят из разноколиберных примеров... в связи с этим вопрос - где можно посмотреть объекты и их методы для экселя? В VBA Help?

ЗЫ С apl все в порядке, с range вроде тоже (проверял присваиванием ему значения - весь лист заполняется на ура).

CALL METHOD OF app 'Cells' = range.
CHECK sy-subrc = 0.

Call method of range 'Find' = find
exporting #1 = 'be_txt'.
Set property of find 'Value' = 'test'.
CALL FUNCTION 'FLUSH'.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 09 2006, 16:29 
Гость
кусок работающего кода:

Code:
  CREATE OBJECT H_EXCEL 'EXCEL.APPLICATION'.
  SET PROPERTY OF H_EXCEL  'Visible' = 1.
  CALL METHOD OF H_EXCEL 'Workbooks' = H_MAPL.
  CALL METHOD OF H_MAPL 'Open'
    EXPORTING
    #1 = SHABLON.
  CALL METHOD OF H_EXCEL 'Worksheets' = H_SHEET
    EXPORTING #1 = 'Лист1'.
  CALL METHOD OF H_SHEET 'Activate'.
  CALL METHOD OF H_SHEET 'RANGE' = H_ZL
    EXPORTING
    #1 = 'DIRECT'.
  SET PROPERTY OF H_ZL 'Value' = FIO_DIR.


здесь DIRECT - метка ячейки в экселе
(вероятно еще играет роль верхний/нижний регистр)


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 09 2006, 17:05 
Менеджер
Менеджер

Зарегистрирован:
Вт, дек 06 2005, 17:52
Сообщения: 559
Помогло, спасибо. Еще вопрос, если не жалко - можно ли ускорить выгрузку?
Т.е. вот я шаблон открыл, нужные ячейки в шапке отчета (через метки) заполнил, а дальше нужно скинуть целиком таблицу.
Не скидывать же ее тоже через метки, по ячейкам? Нельзя ли целиком строку скинуть? Или еще чего-нить подобное?
Это у меня первая задача по работе с экселем - я человек неопытный. Заранее спасибо.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 09 2006, 17:21 
Гость
Если таблицы большого объема,
то я лично скидываю их через буфер обмена:

Code:
  DATA:  BEGIN OF ZAP OCCURS 0,
                 Z1,
                 Z2,
                 Z3,
            END OF ZAP.    "Таблица с данными

  DATA: BEGIN OF T_EXCEL,
               LINE(4096)               TYPE C,
           END OF T_EXCEL.       "Табличка для вывода в Excel

  CONSTANTS: GC_HEX_TAB  TYPE X  VALUE 9.
  DATA: LD_SEPARATOR  TYPE  C.
  FIELD-SYMBOLS: <FIELD>.


Code:
 
   ASSIGN LD_SEPARATOR TO <FIELD> TYPE 'X'.
  <FIELD> = GC_HEX_TAB.   "Сформировали разделитель ячеек


Code:
...
"Заполняем данными табличку ZAP
...



Code:
LOOP AT ZAP.
    CONCATENATE ZAP-Z1  ZAP-Z2  ZAP-Z3 INTO T_EXCEL-LINE
                 SEPARATED BY LD_SEPARATOR.
    APPEND T_EXCEL.
END OF ZAP.   

"Заполнили табличку для выгрузки в Excel,
"если нужно пропускать ячейки, то дополнить строку в нужном
"месте LD_SEPARATOR-ом



Code:
  CALL FUNCTION 'CLPB_EXPORT'
       TABLES
            DATA_TAB   = EXCEL_TAB
       EXCEPTIONS
            CLPB_ERROR = 1
            OTHERS     = 2.     "Выгрузили табличку в буфер обмена



Code:
  CREATE OBJECT H_EXCEL 'EXCEL.APPLICATION'.

  SET PROPERTY OF H_EXCEL  'Visible' = 1.

  CALL METHOD OF H_EXCEL 'Workbooks' = H_MAPL.

  CALL METHOD OF H_MAPL 'Open'
    EXPORTING
       #1 =  ZFILENAME.


  CALL METHOD OF H_EXCEL 'Worksheets' = H_SHEET
    EXPORTING
    #1 =  NLIST.
  CALL METHOD OF H_SHEET 'Activate'.

  CALL METHOD OF H_SHEET 'RANGE' = RANGE
     EXPORTING
              #1 = 'A1'.              "Начальная ячейка для выгрузки

  CALL METHOD OF RANGE 'SELECT'.
  CALL METHOD OF H_SHEET 'PASTE'.  "Выгружаем содержимое буфера



Преимущество такого способа, несмотря на его громоздкость -
огромная скорость проверка 90-100 листах показала, что требуется считанные секунды


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 09 2006, 17:23 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Посмотрите здесь
Уже хорошо обкатанное решение ;)

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 09 2006, 18:23 
Менеджер
Менеджер

Зарегистрирован:
Вт, дек 06 2005, 17:52
Сообщения: 559
Все работает, за исключением небольшой детали - весь русский текст после буфера обмена превращается в кракозяблы :-(
Что можно с этим сделать?

ЗЫ А как проще всего преобразовать числа? А то вот здесь

LOOP AT ZAP.
CONCATENATE ZAP-Z1 ZAP-Z2 ZAP-Z3 INTO T_EXCEL-LINE
SEPARATED BY LD_SEPARATOR.
APPEND T_EXCEL.
END OF ZAP

у меня есть числовые поля, просто CONCATENATE не получается. Каждое в LOOPе приводить к char? Может попроще метод есть, а я не знаю? Но это так, оптимизация.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 09 2006, 19:38 
Менеджер
Менеджер

Зарегистрирован:
Вт, дек 06 2005, 17:52
Сообщения: 559
Хееелп! Что делать? А так ведь все хорошо начиналось....

Я уже и проверку Юникода отключил - не помогает.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 09 2006, 20:27 
Гость
да, здесь есть неудобство :oops:

решается с помощью переключения на русский язык непосредственно перед выгрузкой


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, мар 10 2006, 09:23 
Менеджер
Менеджер

Зарегистрирован:
Вт, дек 06 2005, 17:52
Сообщения: 559
Нифига себе неудобство :-(
А из САПа можно раскладку клавиатуры изменить???

Еще вопрос - почему вот этот код не конвертит ничего (wa_short_table-price_left - CURR)?

str(240) TYPE c.
WRITE wa_short_table-price_left TO str CURRENCY 'UAH'.

Пробовал и MOVE TO. Тоже ничего.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, мар 10 2006, 10:52 
Гость
Sergeant написал(а):
Нифига себе неудобство :-(


ну, извини :oops:
если не нравится, выгружай тогда табличку в обычный файл,
потом цепляй в ёксель.
но потеряешь в скорости.

а по поводу конвертации попробуй просто

str(240) TYPE c.
WRITE wa_short_table-price_left TO str.
condense: str.

если надо заменить точку/запятую,
то потом сделай
translate str using ',.'.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения: re
СообщениеДобавлено: Сб, мар 11 2006, 21:26 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
а еще у клипборда есть такой недостаток:
когда загрузка/выгрузка продолжительна и пользователь использовал буфер обмена :lol:


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: re
СообщениеДобавлено: Вс, мар 12 2006, 18:47 
Гость
trop написал(а):
а еще у клипборда есть такой недостаток:
когда загрузка/выгрузка продолжительна и пользователь использовал буфер обмена :lol:


выгрузка вовсе не продолжительна,
ведь загрузка буфера происходит в последний момент,
а выгрузка из буфера - секунды.

В любом случае - вопрос риторический :lol:
А если вырубить комп во время выгрузки? :wink:


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 13 2006, 08:27 
Начинающий
Начинающий

Зарегистрирован:
Пт, фев 10 2006, 08:28
Сообщения: 12
Откуда: Izhevsk
Sergeant написал(а):
Хееелп! Что делать? А так ведь все хорошо начиналось....

Я уже и проверку Юникода отключил - не помогает.


Кракозябры лечатся:

REGEDIT4

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"1250"="c_1251.nls"
"1251"="c_1251.nls"
"1252"="c_1251.nls"
"1254"="c_1251.nls"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontMapper]
"ARIAL"=dword:000000cc
"DEFAULT"=dword:000000cc

Удачи. Сергей.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 13 2006, 09:25 
Менеджер
Менеджер

Зарегистрирован:
Вт, дек 06 2005, 17:52
Сообщения: 559
to Mihalkin Sergej
Не помогло. А что все это должно было делать и откуда эта инфа?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: re
СообщениеДобавлено: Пн, мар 13 2006, 10:14 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
РМщик написал(а):
В любом случае - вопрос риторический :lol:
А если вырубить комп во время выгрузки? :wink:


не риторический:
одно дело питание выключить, другое - copy/paste-нуть чего-нить и запороть загрузку/выгрузку

чувствуете разницу? :D
вас спасает только маленький объем данных


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB