05.12.2005, 17:01 | #1 |
Участник
|
Разрыв страницы в Excel
Подскажите, пожалуйста, как из кода установить горизонтальный разрыв страницы в Excel в определенном месте (зная номер строки)
такой код: COM ExcelApplication; COM ActiveWindow; COM SelectedSheets; COM HPageBreaks; COM ActiveCell; //Надо чтобы к этому моменту уже был ExcelApplication ActiveWindow = ExcelApplication.ActiveWindow(); SelectedSheets = ActiveWindow.SelectedSheets(); HPageBreaks = SelectedSheets.HPageBreaks(); ActiveCell = ExcelApplication.ActiveCell(); HPageBreaks.add(ActiveCell); вставляет разрывы страницы с позиции курсора в шаблоне, на основе которого формируем файл (судя по всему ActiveCell - ячейка, где стоит курсор) Определенно, нужно как то ActiveCell "сказать" какая она, но как? Может быть у кого-то есть еще варианты... |
|
05.12.2005, 17:20 | #2 |
Moderator
|
Что-то типа:
... WorkBook = ExcelApplication.ActiveWorkBook; WorkSheet = WorkBook.ActiveSheet(); ActiveCell = WorkSheet.Range('A30'); ...
__________________
Андрей. Последний раз редактировалось Dron AKA andy; 05.12.2005 в 17:23. |
|
05.12.2005, 17:24 | #3 |
Участник
|
PHP код:
|
|
05.12.2005, 17:52 | #4 |
Участник
|
А можно с описанием переменных?
Цитата:
Сообщение от PavelM
PHP код:
|
|
05.12.2005, 17:59 | #5 |
Участник
|
Цитата:
Сообщение от Plushy
А можно с описанием переменных?
|
|
06.12.2005, 10:32 | #6 |
Участник
|
Спасибо большое всем!
Цитата:
Сообщение от Lemming
ComExcelDocument_RU.insertPageBreak()
Последний короче, соответственно его и выбираю (и как я не увидела этот метод в классе ). |
|
08.12.2005, 16:16 | #7 |
Участник
|
Опять проблема :(
Разрыв страницы вставлять умею, но при печати документа все равно "красоты" не получается. Документ имеет формат: ШАПКА, ТАБЛИЦА (с итоговыми строками), БЛОК ПОДПИСЕЙ Для каждого документа задаем 3 параметра - количество строк в таблице на первой странице, количество на второй и далее, количество на последней (не более) Нельзя переносить на последнюю страницу итоги и подписи отдельно, необходимо к ним прицепить хотя бы одну строчку из таблицы. Соответственно, в таких ситуациях я вставляю разделитель страницы перед последней строчкой таблицы. Т.Е. вроде бы цель достигнута НО Эксель считает, что последняя строка и итоговая строка влезает на первую страницу, поэтому ставит еще свой разделитель страниц и выкидывает подписи отдельно (что недопустимо!) У меня получается: шапка и все, кроме одной строки таблицы - разрыв страницы (МОЙ) потом последняя строка таблицы и итоги - разрыв страницы ("сделано Экселем") и все что осталось уже на последней странице Кто-нибудь знает, как с этим бороться? |
|
08.12.2005, 16:40 | #8 |
Участник
|
Excel
Похоже Эксель вставляет свои разрывы страниц в любом случае и позволяет добавлять еще разрывы страниц.
Т.е. надо выводить весь документ, потом удалять Экселевские разрывы страниц и потом уже вставлять свои.... Но вопрос еще в силе, может быть кто-то знает, как сказать Экселю "не разбивать на страницы". |
|
08.12.2005, 17:16 | #9 |
Участник
|
Цитата:
Сообщение от Plushy
Но вопрос еще в силе, может быть кто-то знает, как сказать Экселю "не разбивать на страницы".
|
|
08.12.2005, 18:07 | #10 |
Участник
|
Цитата:
Сообщение от Lemming
Была такая ерунда, вроде взял кол-во строк с запасом. Вроде так решилось. Попробуйте взять с запасом(строк на 1-й странице и строк на остальных), а не в притык.
Имперические методы имеют право на существование... На самом деле нужно определить размеры рабочей области, а это размер листа минус поля (настройка листа екселя ) минус поля принтера ( свойства принтера ) потом определить высоту строки и методом деления определить кол-во строк размещаемых на листе... и поставить разрыв. Такая вот арифметика.... |
|
12.12.2005, 16:13 | #11 |
Участник
|
Цитата:
Сообщение от simply2double
Имперические методы имеют право на существование...
На самом деле нужно определить размеры рабочей области, а это размер листа минус поля (настройка листа екселя ) минус поля принтера ( свойства принтера ) потом определить высоту строки и методом деления определить кол-во строк размещаемых на листе... и поставить разрыв. Такая вот арифметика.... Помимо автоматических разрывов страниц можно вставлять разрывы страниц вручную. т.е. как не считай, может так получится, что к "нашим" pagebreak добавятся еще и экселевские. Поэтому, я сделала следующее: после того как сформировала документ для COM worksheet вызвала метод worksheet.ResetAllPageBreaks(); сбрасывающий экселевские разрывы страниц. А потом уже вставила свои pagebreak'и. |
|
|
За это сообщение автора поблагодарили: gefr (1). |
14.12.2005, 09:39 | #12 |
Дмитрий Ерин
|
Абсолютно согласен с simply2double. Простой подсчет строк для разбивки страниц - очень уж ненадежный способ. Он обязательно сыграет с Вами злую шутку, как только потребуется динамически менять высоту строк, если выводимые данные перестанут влезать в одну строку.
Лично я делал примерно так: все разрывы, кроме последнего я отдавал "на откуп" Екселю, поскольку уж он-то лучше знает все свои параметры (высоту, поля и т.д.). А последний разрыв анализировал, а не разбил ли он мне Footer (тот самый блок подписей)? И не оторвал ли он мне последнюю строку от итогов? Или итоги от футера? Вобщем, если последний разрыв стоит не ДО ПОСЛЕДНЕЙ строки данных, то он меня не устраивает, и я вставляю принудительный разрыв именно ПЕРЕД ПОСЛЕДНЕЙ строкой. При этом "родной" Екселевский разрыв благополучно исчезает сам! Честно говоря, не понимаю, почему у Вас этого не происходит... Только что проверил: даже при "ручном" редактировании Екселевской таблички все происходит очень корректно - при вставке принудит. разрыва, автоматический исчезает (или съезжает ниже, если "хвост" опять не помещается на странице. Вот часть кода, который у меня обрабатывает последнюю страницу: PHP код:
|
|
|
За это сообщение автора поблагодарили: Alte Fritz (1), ChD (1). |
Теги |
excel, высота строк отчета, законченный пример, подсчет строк, разрыв страницы |
|
|