|
|
|
Принудительный разрыв страницы в POI
|
|||
|---|---|---|---|
|
#18+
Нужно сделать принудительное разбиение документа по листам. Почему-то туплю и не могу никак найти. Подскажите, пожалуйста! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2012, 15:57:18 |
|
||
|
Принудительный разрыв страницы в POI
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2012, 20:15:11 |
|
||
|
Принудительный разрыв страницы в POI
|
|||
|---|---|---|---|
|
#18+
Alexey Kuznetsov, Спасибо. Не сразу заметил ответ, поэтому среагировал только сейчас... Насколько я въехал - там не совсем то. Мне нужно самому разорвать страницу в нужном месте, отключив экселевскую разбивку по страницам. Задача в общем-то такая: у меня отчеты в php, но часть отчетов - из десктопного комплекса. Нужно выводить запрос+заголовки столбцов в эксель. Все это сделано, но возникла еще стандартная задача - разбивка в нужном месте листа, нумерация страниц, шапка на каждом листе и и т.д., т.п. Как это делается в дельфях, например, я хорошо знал, хотя теперь смутно помню, но как это все перевести на джаву - чего-то никак не соображу. То есть просто нужен конкретный оператор, а я не соображу какой. Задача не первоочередная, но в очереди стоит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2012, 12:15:10 |
|
||
|
Принудительный разрыв страницы в POI
|
|||
|---|---|---|---|
|
#18+
Насколько я понял sheet.setAutobreaks не разрывает страницу, а просто отключает автоматическую экселевскую разбивку по страницам. А мне нужно не просто отключить разбивку экселя, но и "включить" свою. Как я помню, далее нужно отслеживать "пиксельную высоту" строк ( суммируя row.getHeight()) и в нужном месте вставлять разрыв. Вобщем, задача-то стандартная, но чего-то не могу быстро найти и попутно пока решаю еще 4-5 задач... Никто не поможет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2012, 12:34:22 |
|
||
|
Принудительный разрыв страницы в POI
|
|||
|---|---|---|---|
|
#18+
m77, напиши как бы ты это в делфях делал, может подскажу как на джаве сделать. я в свое время POI достаточно глубоко копал, даже баг репорты и патчи им слал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2012, 15:49:13 |
|
||
|
Принудительный разрыв страницы в POI
|
|||
|---|---|---|---|
|
#18+
Alexey Kuznetsovнапиши как бы ты это в делфях делал, может подскажу как на джаве сделать. я в свое время POI достаточно глубоко копал, даже баг репорты и патчи им слал :) Спасибо! В моем представлении ( насколько я помню "дельфовый" механизм ) нужно сделать так: Отключить стандартный механизм разбиения на страницы, просуммировать row.getHeight() (не помню в чем он - в мм или пикселях), отследить, превышается ли с учетом следующей строки размер страницы и, если да, сделать принудительный разрыв страницы. Просто подсчитывать кол-во строк некорректно, т.к. может быть сделан перенос строки внутри ячейки. Как я помню, на странице размещается стандартная высота - не болеее чего-то. Также, как и высота ячейки не может превышать 409 с чем-то там у.е. (мм? пикселей? какая разница?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2012, 17:25:52 |
|
||
|
Принудительный разрыв страницы в POI
|
|||
|---|---|---|---|
|
#18+
Или нужен дельфовый код? Ему уже лет пять от роду... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2012, 17:38:56 |
|
||
|
Принудительный разрыв страницы в POI
|
|||
|---|---|---|---|
|
#18+
m77, да, код делфовый покажи, моет соображу как то же самое на POI сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2012, 18:10:02 |
|
||
|
Принудительный разрыв страницы в POI
|
|||
|---|---|---|---|
|
#18+
Нашел только какой-то кривоватый и сложный вариант, где скорость была не самым важным делом, но все работало. Выгрузка для 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2012, 10:59:35 |
|
||
|
Принудительный разрыв страницы в POI
|
|||
|---|---|---|---|
|
#18+
Это какой-то черновик, где я вместо фаст-репортовского перевода в эксель делал свой собственный (родной фаст-репортовский на тот момент был совсем уж кривой), но даже его я не совсем понял как перевести на джаву. Как я понял, row.getHeight() не соответствует высоте строки Excel.Selection.RowHeight и вообще я немного запутался в соответствиях... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2012, 13:04:20 |
|
||
|
Принудительный разрыв страницы в POI
|
|||
|---|---|---|---|
|
#18+
m77, судя по всему то что ты хочешь будет сделать затруднительно. так как в делфи ты напрямую экселем рулишь, а через POI ты строишь граф объектов, которые после сериалзизации будет валидной книгой экселя, поэтому в POI и нету никаких Selection - так как это run-time свойство екселя. Нашел поиском, что вроде у класса HSSFSheet есть метод setAutoBreaks() попробуй его проверить, что оно дает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2012, 06:02:03 |
|
||
|
Принудительный разрыв страницы в POI
|
|||
|---|---|---|---|
|
#18+
Alexey Kuznetsovm77, судя по всему то что ты хочешь будет сделать затруднительно. так как в делфи ты напрямую экселем рулишь, а через POI ты строишь граф объектов, которые после сериалзизации будет валидной книгой экселя, поэтому в POI и нету никаких Selection - так как это run-time свойство екселя. Нашел поиском, что вроде у класса HSSFSheet есть метод setAutoBreaks() попробуй его проверить, что оно дает. Спасибо. Я уже нашел как сделать разрыв страницы - это именно то, что Вы написали,- но не понял как найти место разрыва. В дельфях я выводил данные, смотрел высоту строки и наблюдал, чтобы общая высота страницы не превысила максимальное значение. В POI есть, вроде бы похожие операции, но, например, вывести строку и посмотреть ее высоту нельзя, как я понял. row.getHeight(), судя по отладчику, выдает какую-то не понятную постоянную величину не пойми в каких единицах измерения. Например, в либерофисе, где вообще криво выводится высота строки и она всегда почему-то разная, там совсем другие цифры, чем выдает оператор. Или все же можно добиться, чтобы вывести строку и посмотреть ее высоту с учетом wrap? Это, вобщем-то все, чего мне не достает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2012, 10:27:50 |
|
||
|
Принудительный разрыв страницы в POI
|
|||
|---|---|---|---|
|
#18+
Не, погорячился - разрыв страницы делается с помощью sheet.setRowBreak(row.getRowNum()); Но вот в каком месте? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2012, 10:33:09 |
|
||
|
Принудительный разрыв страницы в POI
|
|||
|---|---|---|---|
|
#18+
m77, попробуй использовать классы, упомянутые тут: http://apache-poi.1045710.n5.nabble.com/Autosize-row-for-HSSF-library-tt2308264.html#a2308271 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2012, 10:45:45 |
|
||
|
Принудительный разрыв страницы в POI
|
|||
|---|---|---|---|
|
#18+
календаревед, спасибо! Там, как я понял, высота определяется в зависимости от выбранного типа и размера шрифта, но не учитывается перенос строки внутри ячейки. А без такого учета работать схема будет только в очень ограниченном числе случаев, когда переноса не требуется. Нужно сделать с учетом wrap-a, но как это сделать - чего-то не понятно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2012, 11:17:08 |
|
||
|
Принудительный разрыв страницы в POI
|
|||
|---|---|---|---|
|
#18+
m77, как раз количество автоматических переносов внутри ячейки там и вычисляется. А не будет работать, если внутри ячейки есть принудительные переносы (то, что в екселе можно сделать комбинацией клавиш Alt+Enter), да и это, на мой взгляд, только потому что автор дал пример, а не конечное решение (разбить строку по этому разделителю "\n" на подстроки и посчитать высоту для каждой отдаётся на откуп воспользовавшимся советом). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2012, 11:27:01 |
|
||
|
Принудительный разрыв страницы в POI
|
|||
|---|---|---|---|
|
#18+
Чего-то запутываюсь. Почему не делается переноса строки в ячейке? Код: java 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2012, 17:12:50 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37976187&tid=2130852]: |
0ms |
get settings: |
13ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
| others: | 325ms |
| total: | 485ms |

| 0 / 0 |
