Текущее время: Ср, июн 25 2025, 00:13

Часовой пояс: 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 часа


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

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


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

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