28.03.2008, 16:59 | #1 |
Axapta Retail User
|
"Красивости" Excel
Всем доброго вечера. И хотя пятница, мучаюсь вопросом, прошу вашей помощи.
Есть класс кот. наследуется от comExcelDocument_RU. Открывается excel, подсовывается шаблон & в него вставляются данные из буффера обмена (класс ParseBuffer). Так вот выводит моментально (~15 сек = 60 000 int строк). Но вопрос в следующем, как вставить программно точки обрыва страницы, чтобы выводить подписи, а потом след документ/страница, и сново шапка, след. строки, подписи.. Никак не пойму, как сделать. Или как в Axapta подготавливать 3 места печати - header, lines, footer (epilog) ? Но тогда как быть с шаблоном? Или же все таки - считать сколько строк должно быть на странице, вычитать шапку, эпилог, а потом каждый раз копировать шапку?
__________________
Романтик.. |
|
28.03.2008, 17:35 | #2 |
Участник
|
Единственное, что я видел: вручную добавлять объекты HPageBreak Object в том месте, где должен был быть разрыв страницы. Соответственно после вставки каждой строчки требуется вычислять, не превышел ли размер страницы и зафигачивать футер.
|
|
28.03.2008, 17:42 | #3 |
Участник
|
Цитата:
http://subscribe.ru/archive/tech.nav.../17211824.html но принцип работы с Экселем одинаковый. Там советуют Цитата:
4) когда вы формируете многостраничный документ с форматированием, не вставляйте разрывы страниц по мере формирования документа. Лучше записывайте номера строк, где это надо сделать, во временную таблицу, и УЖЕ ПОСЛЕ ФОРМИРОВАНИЯ документа запускайте отдельную функцию, которая расставит разрывы в нужных местах. Экономия времени коллоссальная.
|
|
28.03.2008, 17:44 | #4 |
Участник
|
Я бы подписи затолкал в footer настройками параметров таблицы и вообще бы не заморачивался "вставкой программно".
|
|
28.03.2008, 17:47 | #5 |
Axapta Retail User
|
Поясните, не понял.
__________________
Романтик.. |
|
28.03.2008, 17:49 | #6 |
Участник
|
А почему в шаблоне не можете настроить сквозные стороки для шапки и футер для подписей?
__________________
Axapta v.3.0 sp5 kr2 |
|
28.03.2008, 17:54 | #7 |
Участник
|
|
|
28.03.2008, 18:06 | #8 |
Axapta Retail User
|
оО не знал =) а где в 2003 это делается?
__________________
Романтик.. |
|
28.03.2008, 18:10 | #9 |
Axapta Retail User
|
Параметры страницы- колонтитулы - вы это имеете ввиду?
__________________
Романтик.. |
|
28.03.2008, 18:11 | #10 |
Участник
|
Ну туда можно вставить текст и рисунки а вто табличку туда не вставишь (причем выровненную по листу)
|
|
29.03.2008, 20:47 | #11 |
Axapta Retail User
|
Все равно не пойму, как сделать чтоб в швблоне печататлись только там где укажу строчки, а если строк больше то еще раз открывался шаблон...
__________________
Романтик.. |
|
31.03.2008, 10:31 | #12 |
Злыдни
|
Если разрывы страниц и итоги на странице должны зависить от устройств вывода, лучше смотреть в сторону реализации подсчета итогов, вывода заголовков, разрывов страниц и прочего в самом шаблоне в функции Workbook_BeforePrint.
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
31.03.2008, 12:49 | #13 |
Участник
|
С шапкой на каждой странице все просто. Пункт меню: Файл - Параметры страницы - закладка Лист - раздел "Печатать на каждой странице" - Сквозные строки
Указанные здесь строки будут печататься как заголовки на каждой новой странице. На первой странице они будут печататься как есть. Т.е. до них может быть отображен заголовок всего файла. |
|
17.04.2013, 16:45 | #14 |
северный Будда
|
Подниму тем, ибо объявилась проблема аналогичного характера.
Дано - есть лист Экселя, в котором некоторые строки объединены. Лист большой, поэтому при печати получается несколько страниц. Задача - сделать так, чтобы границы этих страниц не попадали внутрь объединённых блоков. Например, объединены строки 11,12,13, Эксель по умолчанию провёл границу между страницами между строками 11 и 12, надо сдвинуть границу вниз на "между 13 и 14" (ну или вверх - это несущественно). Танцы с бубном вокруг HPageBreak результата не дали. Т.е. я нахожу границу, знаю насколько двигать, но само смещение выполнить не могу. Кто-нибудь решал подобную задачу?
__________________
С уважением, Вячеслав |
|
17.04.2013, 22:37 | #15 |
Участник
|
http://office.microsoft.com/ru-ru/ex...102576899.aspx
Цитата:
Разрывы страниц, вставленные приложением Excel автоматически (отображаются пунктирной линией), нельзя удалить, а добавленные вручную (отображаются сплошной линией) — можно
Цитата:
Если трюк со вставкой дополнительного разрыва не сработает, то есть ещё идея. Вместо смещения самих границ смещать данные, вставляя пустые строки или увеличивая высоту у уже вставленных. |
|
17.04.2013, 22:56 | #16 |
северный Будда
|
Мне, собственно, и не надо удалять разрывы. Мне надо их сдвинуть в нужное место. Т.е. задать для разрыва Х строку У как лежащую под ним. Как это делает макрос (если его записать в Ёкселе). Именно это и не получается(((((((
За идеи спасибо, но по разным причинам это неприемлемо. Надо именно сдвинуть разрывы.
__________________
С уважением, Вячеслав |
|
18.04.2013, 08:18 | #17 |
Участник
|
А что за макрос?
У себя проверил. В случае если атоматический разрыв страницы попал на объединённую область, то после вставки ручного разрыва страницы перед объединённой областью все нижестоящие автоматические разрывы пересчитываются и смещаются ниже на размер страницы. В результате объединённая область полностью оказывается на следующем листе. Вам разве не это нужно? Ещё. Перемещать автоматические разрывы видимо всё-таки можно: http://office.microsoft.com/ru-ru/ex...010358284.aspx Цитата:
Чтобы переопределить автоматические разрывы страниц, вставляемые приложением Excel, можно вставить собственные разрывы страниц вручную, переместить или удалить их.
... При перемещении автоматического разрыва страницы он становится вставленным вручную. P.S.: Как добиться того чтобы автоматические разрывы автоматически не попадали на объединённые области - неизвестно |
|
18.04.2013, 08:22 | #18 |
Участник
|
http://citforum.ru/programming/windo...rt2.shtml#2.20
Цитата:
вы можете "переместить" разрыв, присвоив новое значение свойству Location объекта HPageBreak
|
|
18.04.2013, 09:20 | #19 |
Участник
|
To pitersky:
Слава, у меня была проблема,я думаю чем-то похожая на твою : нельзя было отрывать итоги от данных и переносить последний блок с данными на последнюю страницу. В тройке делал так : после добавления блока считал количество разрывов X++: anyType getHPageBreakCount(int _workSheet = 1) { COM comWorkSheet, comHPageBreak; COM pageBreakRange; int totalPageBreakCount; ; comWorkSheet = this.getWorkSheet(_workSheet); comHPageBreak = comWorkSheet.hPageBreaks(); return comHPageBreak.count(); } X++: if(curentNumberPageBreak!=document.getHPageBreakCount(1)) { document.insertPageBreakBeforeRow(StartLineRow,1); //переносим строки на новый лист curentNumberPageBreak = document.getHPageBreakCount(1); X++: #define.xlPageBreakManual(-4135) public void insertPageBreakBeforeRow(int _row, int _workSheet = 1) { COM comRows, comWorkSheet, comRow; COMVariant comRowVariant; ; comWorkSheet = this.getWorkSheet(_workSheet); comRows = comWorkSheet.rows(); comRowVariant = comRows.item(_row); comRow = COM::createFromVariant(comRowVariant); comRow.pageBreak(#xlPageBreakManual); } |
|
|
За это сообщение автора поблагодарили: S.Kuskov (1). |
18.04.2013, 14:10 | #20 |
северный Будда
|
Попробовал. Не получилось(((((( Дефолтные разрывы остались на месте
__________________
С уважением, Вячеслав |
|