AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.12.2005, 17:01   #1  
Plushy is offline
Plushy
Участник
 
11 / 11 (1) +
Регистрация: 08.11.2005
Разрыв страницы в 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  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Что-то типа:
...
WorkBook = ExcelApplication.ActiveWorkBook;
WorkSheet = WorkBook.ActiveSheet();
ActiveCell = WorkSheet.Range('A30');
...
__________________
Андрей.

Последний раз редактировалось Dron AKA andy; 05.12.2005 в 17:23.
Старый 05.12.2005, 17:24   #3  
PavelM is offline
PavelM
Участник
 
27 / 10 (1) +
Регистрация: 20.01.2005
PHP код:
    workSheets excel.worksheets();
    
workSheet  workSheets.item('Лист1');
    
comRange  workSheet.Range('3:3');
    
hbreak workSheet.HPageBreaks();
    
hbreak.Add(comRange); 
Старый 05.12.2005, 17:52   #4  
Plushy is offline
Plushy
Участник
 
11 / 11 (1) +
Регистрация: 08.11.2005
А можно с описанием переменных?
Цитата:
Сообщение от PavelM
PHP код:
    workSheets excel.worksheets();
    
workSheet workSheets.item('Лист1');
    
comRange workSheet.Range('3:3');
    
hbreak workSheet.HPageBreaks();
    
hbreak.Add(comRange); 
А можно с описанием переменных?
Старый 05.12.2005, 17:59   #5  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Цитата:
Сообщение от Plushy
А можно с описанием переменных?
ComExcelDocument_RU.insertPageBreak()
Старый 06.12.2005, 10:32   #6  
Plushy is offline
Plushy
Участник
 
11 / 11 (1) +
Регистрация: 08.11.2005
Спасибо большое всем!
Цитата:
Сообщение от Lemming
ComExcelDocument_RU.insertPageBreak()
Все попробовала, все варианты работают.

Последний короче, соответственно его и выбираю (и как я не увидела этот метод в классе ).
Старый 08.12.2005, 16:16   #7  
Plushy is offline
Plushy
Участник
 
11 / 11 (1) +
Регистрация: 08.11.2005
Опять проблема :(

Разрыв страницы вставлять умею, но при печати документа все равно "красоты" не получается.
Документ имеет формат: ШАПКА, ТАБЛИЦА (с итоговыми строками), БЛОК ПОДПИСЕЙ

Для каждого документа задаем 3 параметра - количество строк в таблице на первой странице, количество на второй и далее, количество на последней (не более)

Нельзя переносить на последнюю страницу итоги и подписи отдельно, необходимо к ним прицепить хотя бы одну строчку из таблицы.

Соответственно, в таких ситуациях я вставляю разделитель страницы перед последней строчкой таблицы.
Т.Е. вроде бы цель достигнута
НО
Эксель считает, что последняя строка и итоговая строка влезает на первую страницу, поэтому ставит еще свой разделитель страниц и выкидывает подписи отдельно (что недопустимо!)

У меня получается:
шапка и все, кроме одной строки таблицы - разрыв страницы (МОЙ)
потом последняя строка таблицы и итоги - разрыв страницы ("сделано Экселем")
и все что осталось уже на последней странице

Кто-нибудь знает, как с этим бороться?
Старый 08.12.2005, 16:40   #8  
Plushy is offline
Plushy
Участник
 
11 / 11 (1) +
Регистрация: 08.11.2005
Excel
Похоже Эксель вставляет свои разрывы страниц в любом случае и позволяет добавлять еще разрывы страниц.

Т.е. надо выводить весь документ, потом удалять Экселевские разрывы страниц и потом уже вставлять свои....

Но вопрос еще в силе, может быть кто-то знает, как сказать Экселю "не разбивать на страницы".
Старый 08.12.2005, 17:16   #9  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Цитата:
Сообщение от Plushy
Но вопрос еще в силе, может быть кто-то знает, как сказать Экселю "не разбивать на страницы".
Была такая ерунда, вроде взял кол-во строк с запасом. Вроде так решилось. Попробуйте взять с запасом(строк на 1-й странице и строк на остальных), а не в притык.
Старый 08.12.2005, 18:07   #10  
simply2double is offline
simply2double
Участник
Аватар для simply2double
 
556 / 19 (2) ++
Регистрация: 08.09.2004
Адрес: alfa cen
Цитата:
Сообщение от Lemming
Была такая ерунда, вроде взял кол-во строк с запасом. Вроде так решилось. Попробуйте взять с запасом(строк на 1-й странице и строк на остальных), а не в притык.

Имперические методы имеют право на существование...

На самом деле нужно определить размеры рабочей области, а это размер листа минус поля (настройка листа екселя ) минус поля принтера ( свойства принтера ) потом определить высоту строки и методом деления определить кол-во строк размещаемых на листе... и поставить разрыв.

Такая вот арифметика....
Старый 12.12.2005, 16:13   #11  
Plushy is offline
Plushy
Участник
 
11 / 11 (1) +
Регистрация: 08.11.2005
Цитата:
Сообщение от simply2double
Имперические методы имеют право на существование...

На самом деле нужно определить размеры рабочей области, а это размер листа минус поля (настройка листа екселя ) минус поля принтера ( свойства принтера ) потом определить высоту строки и методом деления определить кол-во строк размещаемых на листе... и поставить разрыв.

Такая вот арифметика....
В хелпе Экселя сказано:
Помимо автоматических разрывов страниц можно вставлять разрывы страниц вручную.

т.е. как не считай, может так получится, что к "нашим" pagebreak добавятся еще и экселевские.

Поэтому, я сделала следующее:
после того как сформировала документ для COM worksheet вызвала метод
worksheet.ResetAllPageBreaks();
сбрасывающий экселевские разрывы страниц.
А потом уже вставила свои pagebreak'и.
За это сообщение автора поблагодарили: gefr (1).
Старый 14.12.2005, 09:39   #12  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Абсолютно согласен с simply2double. Простой подсчет строк для разбивки страниц - очень уж ненадежный способ. Он обязательно сыграет с Вами злую шутку, как только потребуется динамически менять высоту строк, если выводимые данные перестанут влезать в одну строку.

Лично я делал примерно так: все разрывы, кроме последнего я отдавал "на откуп" Екселю, поскольку уж он-то лучше знает все свои параметры (высоту, поля и т.д.). А последний разрыв анализировал, а не разбил ли он мне Footer (тот самый блок подписей)? И не оторвал ли он мне последнюю строку от итогов? Или итоги от футера? Вобщем, если последний разрыв стоит не ДО ПОСЛЕДНЕЙ строки данных, то он меня не устраивает, и я вставляю принудительный разрыв именно ПЕРЕД ПОСЛЕДНЕЙ строкой.

При этом "родной" Екселевский разрыв благополучно исчезает сам! Честно говоря, не понимаю, почему у Вас этого не происходит... Только что проверил: даже при "ручном" редактировании Екселевской таблички все происходит очень корректно - при вставке принудит. разрыва, автоматический исчезает (или съезжает ниже, если "хвост" опять не помещается на странице.

Вот часть кода, который у меня обрабатывает последнюю страницу:
PHP код:
    int     pageBreakNum;
    
int     lastPageBreakRow 0;
    
int     pageBreakRow = -1;
    ;
    
lastLineRowNum      = ...// здесь определяем номер последней строки, 
 // которая должна обязательно попасть на посл. страницу
...    
// найдем последний разрыв страницы
    
for (pageBreakNum 1pageBreakRow != 0pageBreakNum++)
    {
        
lastPageBreakRow    pageBreakRow;
        
pageBreakRow        document.getHPageBreak(pageBreakNum);
    }

    if(
lastPageBreakRow lastLineRowNum)
    {
        
document.insertPageBreak(ComExcelDocument_RU::numToNameCell(1lastLineRowNum));
    }
... 
За это сообщение автора поблагодарили: Alte Fritz (1), ChD (1).
Теги
excel, высота строк отчета, законченный пример, подсчет строк, разрыв страницы

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
Как определить конец страницы в Excel vasiliy DAX: Программирование 29 31.10.2007 09:27
[Excel] - Несколько версий Excel на машине клиента Андре DAX: Программирование 11 07.08.2007 13:45
Вызов Item() для коллекций Excel Владимир Максимов DAX: Программирование 15 17.08.2006 19:47
Параметры страницы Excel через COM Sada DAX: Программирование 3 18.05.2006 10:30

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 17:59.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.