Текущее время: Вт, июн 24 2025, 07:30

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Параметры страницы Excel через OLE?
СообщениеДобавлено: Пн, июл 24 2006, 14:14 
Начинающий
Начинающий

Зарегистрирован:
Пн, июл 24 2006, 14:07
Сообщения: 14
Может кто устанавливал параметры страницы Excel через OLE при выводе на печать, чтобы в табуляторе "Страница" в разделе "Масштаб " индикатор стоял на поле "разместить не более чем на". Что-то бьюсь как рыба об лед, а не выходит :(. Заранее благодарен всем за советы, ответы и примеры.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 24 2006, 14:43 
Специалист
Специалист

Зарегистрирован:
Пт, июн 16 2006, 11:39
Сообщения: 178
Откуда: Москва
Создайте макрос в VBA, и воспроизведите его в abap'е.
Макрос, который у меня получился, работает.

Sub Макрос1()
'
'

'
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
ActiveSheet.PageSetup.PrintArea = ""
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.787401575)
.RightMargin = Application.InchesToPoints(0.787401575)
.TopMargin = Application.InchesToPoints(0.984251969)
.BottomMargin = Application.InchesToPoints(0.984251969)
.HeaderMargin = Application.InchesToPoints(0.5)
.FooterMargin = Application.InchesToPoints(0.5)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlPortrait
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 2
.FitToPagesTall = 1
.PrintErrors = xlPrintErrorsDisplayed
End With
End Sub


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 24 2006, 15:00 
Начинающий
Начинающий

Зарегистрирован:
Пн, июл 24 2006, 14:07
Сообщения: 14
Yuri : а Вы его(макрос) целиком в ABAP перекидывали? Я вот пытался только 3 оператора:
.Zoom = False
.FitToPagesWide = 2
.FitToPagesTall = 1
устанавливать. Сейчас попробую все перекинуть.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 24 2006, 15:05 
Специалист
Специалист

Зарегистрирован:
Пт, июн 16 2006, 11:39
Сообщения: 178
Откуда: Москва
Конкретно этот - нет, но много подобных было.
Какие конкретно трудности возникают?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 24 2006, 15:28 
Начинающий
Начинающий

Зарегистрирован:
Пн, июл 24 2006, 14:07
Сообщения: 14
Вот нужный мне макрос:
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
ActiveSheet.PageSetup.PrintArea = ""
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = "Лист &P из &N"
.LeftMargin = Application.InchesToPoints(0.590551181102362)
.RightMargin = Application.InchesToPoints(0.590551181102362)
.TopMargin = Application.InchesToPoints(0.78740157480315)
.BottomMargin = Application.InchesToPoints(0.78740157480315)
.HeaderMargin = Application.InchesToPoints(0.511811023622047)
.FooterMargin = Application.InchesToPoints(0.511811023622047)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = True
.CenterVertically = False
.Orientation = xlPortrait
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = True
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 10
.PrintErrors = xlPrintErrorsDisplayed
End With
Вот решение(которое не работает):
CALL METHOD OF h_excel 'Workbooks' = h_mapl.
CALL METHOD OF h_mapl 'Add' = h_map.
CALL METHOD OF h_excel 'Worksheets' = h_sh
EXPORTING
#1 = 1.
CALL METHOD OF h_sh 'PageSetup' = h_ps.


SET PROPERTY OF h_ps 'PrintTitleRows' = SPACE.
SET PROPERTY OF h_ps 'PrintTitleColumns' = SPACE.

SET PROPERTY OF h_ps 'PrintArea' = SPACE.

SET PROPERTY OF h_ps 'LeftHeader' = SPACE.
SET PROPERTY OF h_ps 'CenterHeader' = SPACE.
SET PROPERTY OF h_ps 'RightHeader' = SPACE.
SET PROPERTY OF h_ps 'LeftFooter' = SPACE.
SET PROPERTY OF h_ps 'CenterFooter' = SPACE.
* установим нижний колонтитул(подпись)
SET PROPERTY OF h_ps 'RightFooter' = 'Лист &P из &N'.

* установим размеры полей. Размеры задаются в точках.
* 1 см приблизит 28 точек
SET PROPERTY OF h_ps 'LeftMargin' = 42.
SET PROPERTY OF h_ps 'RightMargin' = 42.
SET PROPERTY OF h_ps 'TopMargin' = 56.
SET PROPERTY OF h_ps 'BottomMargin' = 56.
SET PROPERTY OF h_ps 'HeaderMargin' = 36.
SET PROPERTY OF h_ps 'FooterMargin' = 36.

SET PROPERTY OF h_ps 'PrintHeadings' = False.
SET PROPERTY OF h_ps 'PrintGridlines' = False.
SET PROPERTY OF h_ps 'PrintComments' = xlPrintNoComments.

SET PROPERTY OF h_ps 'PrintQuality' = 600.

SET PROPERTY OF h_ps 'CenterHorizontally' = False.
SET PROPERTY OF h_ps 'CenterVertically' = False.
SET PROPERTY OF h_ps 'Orientation' = xlPortrait.

SET PROPERTY OF h_ps 'Draft' = False.

SET PROPERTY OF h_ps 'PaperSize' = xlPaperA4 .
SET PROPERTY OF h_ps 'FirstPageNumber' = xlAutomatic.
SET PROPERTY OF h_ps 'Order' = xlDownThenOver.

SET PROPERTY OF h_ps 'BlackAndWhite' = True.
* устанавливаем масштаб (1 стр в ширину и 30 в дл не влазит на лист)
SET PROPERTY OF h_ps 'Zoom' = False.
SET PROPERTY OF h_ps 'FitToPagesWide' = 1.
SET PROPERTY OF h_ps 'FitToPagesTall' = 30.

SET PROPERTY OF h_ps 'CenterHorizontally' = True.
SET PROPERTY OF h_ps 'CenterVertically' = False.
SET PROPERTY OF h_ps 'PrintErrors' = xlPrintErrorsDisplayed.
"xlDownThenOver" и т.д. это у меня константы Excel. Единственное, что получилось - это размеры полей установить. А хочется, чтобы и количество страниц на которые должна выводится информация, но не устанавливается


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

Зарегистрирован:
Пн, июл 24 2006, 14:07
Сообщения: 14
Не желает масштаб становиться на условие "Разместить не более чем..." никак. Все остальное(размеры полей, центрирование на странице, колонтитулы, черно-белая печать и даже кол-во листов в ширину и в длину) установилось после того, как поставил CALL METHOD cl_gui_cfw=>flush на определенную группу операторов. Теперь выглядит вот так:
...
SET PROPERTY OF h_ps 'PrintHeadings' = False.
SET PROPERTY OF h_ps 'PrintGridlines' = False.
SET PROPERTY OF h_ps 'PrintComments' = xlPrintNoComments.
CALL METHOD cl_gui_cfw=>flush.

SET PROPERTY OF h_ps 'PrintQuality' = 600.
CALL METHOD cl_gui_cfw=>flush.

SET PROPERTY OF h_ps 'CenterHorizontally' = True.
CALL METHOD cl_gui_cfw=>flush.
SET PROPERTY OF h_ps 'CenterVertically' = False.
CALL METHOD cl_gui_cfw=>flush.
SET PROPERTY OF h_ps 'Orientation' = xlPortrait.
CALL METHOD cl_gui_cfw=>flush.

SET PROPERTY OF h_ps 'Draft' = False.
CALL METHOD cl_gui_cfw=>flush.

SET PROPERTY OF h_ps 'PaperSize' = xlPaperA4 .
SET PROPERTY OF h_ps 'FirstPageNumber' = xlAutomatic.
SET PROPERTY OF h_ps 'Order' = xlDownThenOver.
CALL METHOD cl_gui_cfw=>flush.

SET PROPERTY OF h_ps 'BlackAndWhite' = True.
CALL METHOD cl_gui_cfw=>flush.
* устанавливаем масштаб (1 стр в ширину и 30 в дл не влазит на лист)
SET PROPERTY OF h_ps 'FitToPagesWide' = 1.
SET PROPERTY OF h_ps 'FitToPagesTall' = 30.
SET PROPERTY OF h_ps 'Zoom' = False.
CALL METHOD cl_gui_cfw=>flush.
никто не знает как масштаб галочку вниз подвинуть.
Вот даже хэлп из VB:
If the Zoom property is True, the FitToPagesWide property is ignored.

Example
This example causes Microsoft Excel to print Sheet1 exactly one page wide and tall.

With Worksheets("Sheet1").PageSetup
.Zoom = False
.FitToPagesTall = 1
.FitToPagesWide = 1
End With


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 25 2006, 08:10 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, фев 03 2006, 08:00
Сообщения: 344
INCLUDE OLE2INCL.
а вызов Excel'я Вы делаете: CREATE OBJECT EXCEL 'EXCEL.APPLICATION'?

а ещё вопрос: что этот метод делает?
CALL METHOD cl_gui_cfw=>flush


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 25 2006, 08:37 
Специалист
Специалист

Зарегистрирован:
Пт, июн 16 2006, 11:39
Сообщения: 178
Откуда: Москва
Свойство Zoom принимает значения от 10 до 400 видимо из-за этого установить его в False не получается.
Нужно искать другие пути.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 25 2006, 09:03 
Специалист
Специалист

Зарегистрирован:
Пт, июн 16 2006, 11:39
Сообщения: 178
Откуда: Москва
aht написал(а):
INCLUDE OLE2INCL.
а ещё вопрос: что этот метод делает?
CALL METHOD cl_gui_cfw=>flush

Почитайте здесь:
http://help.sap.com/saphelp_46c/helpdat ... ontent.htm


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

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
aht
представь как работает ole (com rpc) по умолчанию,
при любом ole вызове
call method '..' of .. = ..
get property ..
set property ..
происходит сетевой обмен между r/3 и пк пользователя(клиент),
каждый вызов оборачивается в сетевую транзакцию,
это в общем случае около 10-50ms, из которых как минимум половина на сетевой обмен,
если у вас 100 вызовов, будете ждать 1-5 сек, 1000 вызовов - минуты,
и больше половины этого времени - сетевой обмен.

на деле, 1 вызов = 1 сетев.транз. нужен если надо получить с клиента
актуальное значение, например при вызове get property,
чтобы следующим abap оператором использовать его актуальное значение.

чтобы не нервировать клиента, proxy stub(кукла) на стороне r/3
и сетевой менеджер r/3,
имеют возможность буферизации обмена, т.е. оборачивать
несколько вызовов ole в одну сетевую транзакцию,
для этого надо добавлять ключевые слова no flush
при каждом call method, set/get property,
а вызов cl_gui_cfw=>flush( ) производит сброс(flush) сетевого буфера r/3.
важно грамотно строить вызовы ole и последующие flush,
чтобы минимизировать сетевой обмен.

группировать вызовы get property .. no flush
так, чтобы обработка значений была после flush.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 25 2006, 10:57 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, фев 03 2006, 08:00
Сообщения: 344
весьма исчерпывающе, пасибо :D


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

Зарегистрирован:
Пн, июл 24 2006, 14:07
Сообщения: 14
<Yuri> написал(а):
Свойство Zoom принимает значения от 10 до 400 видимо из-за этого установить его в False не получается.
Нужно искать другие пути.

А как же help экселевский, в котором написано, что надо Zoom в False установить. Вопрос, что есть False? 0 или что-то другое?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Параметры страницы Excel через OLE?
СообщениеДобавлено: Пн, сен 02 2013, 17:52 
Начинающий
Начинающий

Зарегистрирован:
Пн, сен 26 2011, 08:36
Сообщения: 16
Пол: Мужской
Коллеги, добрый вечер!
Столкнулся с такой же проблемой, скажите, у кого-нибудь получилось "передвинуть" флажок zoom(масштаб) на "разместить не более чем на"? Использую SET PROPERTY OF <...> 'Zoom' = 'False', как написано в хелпе, не работает.
Спасибо!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Параметры страницы Excel через OLE?
СообщениеДобавлено: Вт, сен 03 2013, 12:21 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 16 2010, 09:57
Сообщения: 106
Откуда: СПб
Пол: Мужской
Leha написал:
у кого-нибудь получилось "передвинуть" флажок zoom(масштаб) на "разместить не более чем на"?

Как корявенький предварительный вариант:
Code:
REPORT  zzzzzz.

TYPE-POOLS ole2.

DATA xlapp        TYPE ole2_object. "Excel.Application
DATA wbks         TYPE ole2_object. "и его дочерние коллекции
DATA wks          TYPE ole2_object. "и объекты
DATA rng          TYPE ole2_object.
DATA dialog       TYPE ole2_object.
DATA pagesetup    TYPE ole2_object.

START-OF-SELECTION.

  CREATE OBJECT xlapp 'Excel.Application'.
  SET PROPERTY OF xlapp 'Visible' = 1.

  CALL METHOD OF xlapp 'Workbooks' = wbks.
  CALL METHOD OF wbks 'Add'.

  CALL METHOD OF xlapp 'Worksheets' = wks
    EXPORTING #1 = 1.

  CALL METHOD OF wks 'Range' = rng
    EXPORTING #1 = 'A1:Z100'.

  SET PROPERTY OF rng 'Value' = '123опа!'.

  "устанавливаем некоторые параметры печати
*  CALL METHOD OF wks 'PageSetup' = pagesetup.
*
*  SET PROPERTY OF pagesetup 'FitToPagesWide' = 2.
*  SET PROPERTY OF pagesetup 'FitToPagesTall' = 3.

  "Zoom = False, FitToPagesWide = 2, FitToPagesTall = 3
  CALL METHOD OF xlapp 'ExecuteExcel4Macro'
    EXPORTING #1 = 'PAGE.SETUP(,,,,,,,,,,,,{2,3})'.

  "это для демонстрации того, что получается
  CALL METHOD OF xlapp 'Dialogs' = dialog
    EXPORTING #1 = '7'. "7 = xlDialogPageSetup

  CALL METHOD OF dialog 'Show'.
  "должно появиться окно "Параметры страницы" с нужными установками

Из-за настроек безопасности в Excel возможна пауза в выполнении. Если зависнет, следует подождать и ткнуть мышкой в окно редактора ABAP, чтобы "пропихнуть" выполнение дальше. Из-за региональных особенностей возможны иные разделители списка в PAGE.SETUP. Подробнее о всей проблеме установки опции Zoom здесь: http://axforum.info/forums/showthread.php?t=30223


Последний раз редактировалось Gustav Вт, сен 03 2013, 13:35, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Параметры страницы Excel через OLE?
СообщениеДобавлено: Вт, сен 03 2013, 13:22 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 16 2010, 09:57
Сообщения: 106
Откуда: СПб
Пол: Мужской
Как более устойчивый вариант, с использованием MSScriptControl для выполнения оператора VBA, устанавливающего Zoom в False, в "родном" контексте:
Code:
REPORT  zzzzzz2.

TYPE-POOLS ole2.

DATA sc           TYPE ole2_object. "MSScriptControl.ScriptControl

DATA xlapp        TYPE ole2_object. "Excel.Application
DATA wbks         TYPE ole2_object. "и его дочерние коллекции
DATA wks          TYPE ole2_object. "и объекты
DATA rng          TYPE ole2_object.
DATA dialog       TYPE ole2_object.
DATA pagesetup    TYPE ole2_object.

START-OF-SELECTION.

  PERFORM form2.

FORM form2.

  CREATE OBJECT sc 'MSScriptControl.ScriptControl'.
  SET PROPERTY OF sc 'Language' = 'vbscript'.

  CREATE OBJECT xlapp 'Excel.Application'.
  SET PROPERTY OF xlapp 'Visible' = 1.

  CALL METHOD OF xlapp 'Workbooks' = wbks.
  CALL METHOD OF wbks 'Add'.

  CALL METHOD OF xlapp 'Worksheets' = wks
    EXPORTING #1 = 1.

  CALL METHOD OF wks 'Range' = rng
    EXPORTING #1 = 'A1:Z100'.

  SET PROPERTY OF rng 'Value' = '123опа!'.

  CALL METHOD OF wks 'PageSetup' = pagesetup.

  "устанавливаем соответствие между объектами VB и ABAP
  CALL METHOD OF sc 'AddObject'
    EXPORTING #1 = 'pageSetup' #2 = pagesetup.

  "устанавливаем некоторые параметры печати
  CALL METHOD OF sc 'ExecuteStatement'
    EXPORTING #1 = 'pageSetup.Zoom = False'.

  SET PROPERTY OF pagesetup 'FitToPagesWide' = 2.
  SET PROPERTY OF pagesetup 'FitToPagesTall' = 3.

  "это для демонстрации того, что получается
  CALL METHOD OF xlapp 'Dialogs' = dialog
    EXPORTING #1 = '7'. "7 = xlDialogPageSetup

  CALL METHOD OF dialog 'Show'.
  "должно появиться окно "Параметры страницы" с нужными установками

ENDFORM.


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

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


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

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


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

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