powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Принудительный разрыв страницы в POI
17 сообщений из 17, страница 1 из 1
Принудительный разрыв страницы в POI
    #37976187
m77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно сделать принудительное разбиение документа по листам. Почему-то туплю и не могу никак найти. Подскажите, пожалуйста!
...
Рейтинг: 0 / 0
Принудительный разрыв страницы в POI
    #37976558
Alexey Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m77,

так?
...
Рейтинг: 0 / 0
Принудительный разрыв страницы в POI
    #37978235
m77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Kuznetsov,
Спасибо. Не сразу заметил ответ, поэтому среагировал только сейчас...

Насколько я въехал - там не совсем то. Мне нужно самому разорвать страницу в нужном месте, отключив экселевскую разбивку по страницам.

Задача в общем-то такая: у меня отчеты в php, но часть отчетов - из десктопного комплекса. Нужно выводить запрос+заголовки столбцов в эксель. Все это сделано, но возникла еще стандартная задача - разбивка в нужном месте листа, нумерация страниц, шапка на каждом листе и и т.д., т.п.

Как это делается в дельфях, например, я хорошо знал, хотя теперь смутно помню, но как это все перевести на джаву - чего-то никак не соображу. То есть просто нужен конкретный оператор, а я не соображу какой. Задача не первоочередная, но в очереди стоит...
...
Рейтинг: 0 / 0
Принудительный разрыв страницы в POI
    #37978282
m77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понял sheet.setAutobreaks не разрывает страницу, а просто отключает автоматическую экселевскую разбивку по страницам.

А мне нужно не просто отключить разбивку экселя, но и "включить" свою. Как я помню, далее нужно отслеживать "пиксельную высоту" строк ( суммируя row.getHeight()) и в нужном месте вставлять разрыв.

Вобщем, задача-то стандартная, но чего-то не могу быстро найти и попутно пока решаю еще 4-5 задач...

Никто не поможет?
...
Рейтинг: 0 / 0
Принудительный разрыв страницы в POI
    #37978757
Alexey Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m77,

напиши как бы ты это в делфях делал, может подскажу как на джаве сделать.
я в свое время POI достаточно глубоко копал, даже баг репорты и патчи им слал :)
...
Рейтинг: 0 / 0
Принудительный разрыв страницы в POI
    #37979040
m77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Kuznetsovнапиши как бы ты это в делфях делал, может подскажу как на джаве сделать.
я в свое время POI достаточно глубоко копал, даже баг репорты и патчи им слал :)
Спасибо! В моем представлении ( насколько я помню "дельфовый" механизм ) нужно сделать так:

Отключить стандартный механизм разбиения на страницы, просуммировать row.getHeight() (не помню в чем он - в мм или пикселях), отследить, превышается ли с учетом следующей строки размер страницы и, если да, сделать принудительный разрыв страницы. Просто подсчитывать кол-во строк некорректно, т.к. может быть сделан перенос строки внутри ячейки.

Как я помню, на странице размещается стандартная высота - не болеее чего-то. Также, как и высота ячейки не может превышать 409 с чем-то там у.е. (мм? пикселей? какая разница?)
...
Рейтинг: 0 / 0
Принудительный разрыв страницы в POI
    #37979073
m77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или нужен дельфовый код? Ему уже лет пять от роду...
...
Рейтинг: 0 / 0
Принудительный разрыв страницы в POI
    #37979144
Alexey Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m77,

да, код делфовый покажи, моет соображу как то же самое на POI сделать
...
Рейтинг: 0 / 0
Принудительный разрыв страницы в POI
    #37979728
m77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел только какой-то кривоватый и сложный вариант, где скорость была не самым важным делом, но все работало. Выгрузка для 1С, где нужно было большие строки разбивать на несколько строк в зависимости от длины строки. Привожу вкратце - только то, что относится к разбиению по страницам.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
  PageHeightCnt  : Double; // Для подсчета высоты
...
  PageHeightCnt := 0;

  try
    Excel := CreateOleObject('Excel.Application');
  except
    if not VarIsEmpty(Excel) then Excel := Unassigned;
		ShowMessage('.. ....... .......... .......... . Excel!');
		Exit;
  end;
.....
      //Проверка - не превышена ли высота страницы с учетом следующем строки(на самом деле брал из спец.функции, но здесь -     
      // упрощенно)
      HeightCell := Excel.Selection.RowHeight;//Высота следующей строки

      if (PageHeightCnt + HeightCell) > 565 then
      begin

        Excel.Selection.Delete(xlUp);//Удаляем строку - выведем ее же, но на следующем листе

        ExlWS.HPageBreaks.Add(ExlWS.Cells[iPosition+1,1]); //Разрыв страницы

        ........
         
        PageHeightCnt := 0;

      end;

      //Выводим строку и наращиваем счетчик
      ....
      PageHeightCnt := PageHeightCnt + Excel.Selection.RowHeight;
...
Рейтинг: 0 / 0
Принудительный разрыв страницы в POI
    #37980039
m77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это какой-то черновик, где я вместо фаст-репортовского перевода в эксель делал свой собственный (родной фаст-репортовский на тот момент был совсем уж кривой), но даже его я не совсем понял как перевести на джаву.

Как я понял, row.getHeight() не соответствует высоте строки Excel.Selection.RowHeight и вообще я немного запутался в соответствиях...
...
Рейтинг: 0 / 0
Принудительный разрыв страницы в POI
    #37981143
Alexey Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m77,

судя по всему то что ты хочешь будет сделать затруднительно.
так как в делфи ты напрямую экселем рулишь, а через POI ты строишь граф объектов, которые после сериалзизации будет валидной книгой экселя, поэтому в POI и нету никаких Selection - так как это run-time свойство екселя.

Нашел поиском, что вроде у класса HSSFSheet есть метод setAutoBreaks() попробуй его проверить, что оно дает.
...
Рейтинг: 0 / 0
Принудительный разрыв страницы в POI
    #37981289
m77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Kuznetsovm77,

судя по всему то что ты хочешь будет сделать затруднительно.
так как в делфи ты напрямую экселем рулишь, а через POI ты строишь граф объектов, которые после сериалзизации будет валидной книгой экселя, поэтому в POI и нету никаких Selection - так как это run-time свойство екселя.

Нашел поиском, что вроде у класса HSSFSheet есть метод setAutoBreaks() попробуй его проверить, что оно дает.
Спасибо. Я уже нашел как сделать разрыв страницы - это именно то, что Вы написали,- но не понял как найти место разрыва. В дельфях я выводил данные, смотрел высоту строки и наблюдал, чтобы общая высота страницы не превысила максимальное значение.

В POI есть, вроде бы похожие операции, но, например, вывести строку и посмотреть ее высоту нельзя, как я понял.

row.getHeight(), судя по отладчику, выдает какую-то не понятную постоянную величину не пойми в каких единицах измерения. Например, в либерофисе, где вообще криво выводится высота строки и она всегда почему-то разная, там совсем другие цифры, чем выдает оператор.

Или все же можно добиться, чтобы вывести строку и посмотреть ее высоту с учетом wrap? Это, вобщем-то все, чего мне не достает...
...
Рейтинг: 0 / 0
Принудительный разрыв страницы в POI
    #37981299
m77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, погорячился - разрыв страницы делается с помощью
sheet.setRowBreak(row.getRowNum());

Но вот в каком месте?
...
Рейтинг: 0 / 0
Принудительный разрыв страницы в POI
    #37981323
m77, попробуй использовать классы, упомянутые тут:
http://apache-poi.1045710.n5.nabble.com/Autosize-row-for-HSSF-library-tt2308264.html#a2308271
...
Рейтинг: 0 / 0
Принудительный разрыв страницы в POI
    #37981392
m77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
календаревед, спасибо! Там, как я понял, высота определяется в зависимости от выбранного типа и размера шрифта, но не учитывается перенос строки внутри ячейки. А без такого учета работать схема будет только в очень ограниченном числе случаев, когда переноса не требуется.

Нужно сделать с учетом wrap-a, но как это сделать - чего-то не понятно...
...
Рейтинг: 0 / 0
Принудительный разрыв страницы в POI
    #37981427
m77, как раз количество автоматических переносов внутри ячейки там и вычисляется. А не будет работать, если внутри ячейки есть принудительные переносы (то, что в екселе можно сделать комбинацией клавиш Alt+Enter), да и это, на мой взгляд, только потому что автор дал пример, а не конечное решение (разбить строку по этому разделителю "\n" на подстроки и посчитать высоту для каждой отдаётся на откуп воспользовавшимся советом).
...
Рейтинг: 0 / 0
Принудительный разрыв страницы в POI
    #37982409
m77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего-то запутываюсь. Почему не делается переноса строки в ячейке?
Код: java
1.
2.
3.
4.
5.
6.
                 cell = row.createCell(iCol);
                 
                 HSSFCellStyle style = wb.createCellStyle();
                 style.setWrapText(true);
                 cell.setCellStyle(style);
                 cell.setCellValue(....);
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Принудительный разрыв страницы в POI
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]