Текущее время: Пт, июл 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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