AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 05.12.2005, 17:01   #1  
Plushy is offline
Plushy
Участник
 
11 / 11 (1) +
Join Date: 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 "сказать" какая она, но как?

Может быть у кого-то есть еще варианты...
Old 05.12.2005, 17:20   #2  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Join Date: 27.03.2002
Location: Москва
Что-то типа:
...
WorkBook = ExcelApplication.ActiveWorkBook;
WorkSheet = WorkBook.ActiveSheet();
ActiveCell = WorkSheet.Range('A30');
...
__________________
Андрей.

Last edited by Dron AKA andy; 05.12.2005 at 17:23.
Old 05.12.2005, 17:24   #3  
PavelM is offline
PavelM
Участник
 
27 / 10 (1) +
Join Date: 20.01.2005
PHP Code:
    workSheets excel.worksheets();
    
workSheet  workSheets.item('Лист1');
    
comRange  workSheet.Range('3:3');
    
hbreak workSheet.HPageBreaks();
    
hbreak.Add(comRange); 
Old 05.12.2005, 17:52   #4  
Plushy is offline
Plushy
Участник
 
11 / 11 (1) +
Join Date: 08.11.2005
А можно с описанием переменных?
Quote:
Originally Posted by PavelM
PHP Code:
    workSheets excel.worksheets();
    
workSheet workSheets.item('Лист1');
    
comRange workSheet.Range('3:3');
    
hbreak workSheet.HPageBreaks();
    
hbreak.Add(comRange); 
А можно с описанием переменных?
Old 05.12.2005, 17:59   #5  
Lemming is offline
Lemming
Участник
Lemming's Avatar
 
1,144 / 343 (14) ++++++
Join Date: 20.04.2004
Location: Москва, Чайнатаун в Люблино
Blog Entries: 10
Quote:
Originally Posted by Plushy
А можно с описанием переменных?
ComExcelDocument_RU.insertPageBreak()
Old 06.12.2005, 10:32   #6  
Plushy is offline
Plushy
Участник
 
11 / 11 (1) +
Join Date: 08.11.2005
Спасибо большое всем!
Quote:
Originally Posted by Lemming
ComExcelDocument_RU.insertPageBreak()
Все попробовала, все варианты работают.

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

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

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

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

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

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

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

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

Но вопрос еще в силе, может быть кто-то знает, как сказать Экселю "не разбивать на страницы".
Old 08.12.2005, 17:16   #9  
Lemming is offline
Lemming
Участник
Lemming's Avatar
 
1,144 / 343 (14) ++++++
Join Date: 20.04.2004
Location: Москва, Чайнатаун в Люблино
Blog Entries: 10
Quote:
Originally Posted by Plushy
Но вопрос еще в силе, может быть кто-то знает, как сказать Экселю "не разбивать на страницы".
Была такая ерунда, вроде взял кол-во строк с запасом. Вроде так решилось. Попробуйте взять с запасом(строк на 1-й странице и строк на остальных), а не в притык.
Old 08.12.2005, 18:07   #10  
simply2double is offline
simply2double
Участник
simply2double's Avatar
 
556 / 19 (2) ++
Join Date: 08.09.2004
Location: alfa cen
Quote:
Originally Posted by Lemming
Была такая ерунда, вроде взял кол-во строк с запасом. Вроде так решилось. Попробуйте взять с запасом(строк на 1-й странице и строк на остальных), а не в притык.

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

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

Такая вот арифметика....
Old 12.12.2005, 16:13   #11  
Plushy is offline
Plushy
Участник
 
11 / 11 (1) +
Join Date: 08.11.2005
Quote:
Originally Posted by simply2double
Имперические методы имеют право на существование...

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

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

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

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

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

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

Вот часть кода, который у меня обрабатывает последнюю страницу:
PHP Code:
    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));
    }
... 
This post has been rated by: Alte Fritz (1), ChD (1).
Tags
excel, высота строк отчета, законченный пример, подсчет строк, разрыв страницы

 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Исследование скорости экспорта данных из 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

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 04:34.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.