2012-04-09 33 views
8

Estoy intentando crear algunos archivos xlsx utilizando la biblioteca de POI de Apache para Java y todo para crear los archivos está funcionando bien.Problemas para ajustar la hoja en una sola página en archivos xlsx usando la biblioteca de POI de Apache

El problema surge cuando quiero imprimir esos archivos usando una impresora física. Quiero hacer que cada hoja de mis libros se ajuste a una sola página. Miré a mi alrededor en la documentación y el siguiente código estaría supone que funciona:

 XSSFWorkbook wb = new XSSFWorkbook(); 
     XSSFSheet sheet = wb.createSheet("format sheet"); 

     PrintSetup ps = sheet.getPrintSetup(); 

     sheet.setAutobreaks(true); 

     ps.setFitHeight((short)1); 
     ps.setFitWidth((short)1); 

     for(int i = 0; i < 100; ++i){ 
      sheet.createRow(i); 
      sheet.getRow(i).createCell(0).setCellValue("Test " + i); 
     } 

     FileOutputStream output = new FileOutputStream("Test.xlsx"); 
     wb.write(output); 
     output.close(); 

pero no ... Cuando trato de imprimir, se imprime a tres hojas (lo que en realidad se supone para imprimir si no utilicé la parte PrintSetup). Entonces el código simplemente no hace nada en absoluto.

¿Alguien puede decirme qué hay de malo con ese código?

Además, tengo otra pregunta sobre la impresión de archivos xlsx: ¿Quiero saber si hay una forma de imprimir los archivos xlsx desde mi programa Java sin abrir los archivos y hacer clic en imprimir? Me gusta wb.printAllSheetsInWorkbook(); o algo así.

Respuesta

19

Después

ps.setFitHeight((short)1); 
ps.setFitWidth((short)1); 

Uso

sheet.setFitToPage(true); 
+0

Encontré esto mientras buscaba un problema similar pero usando NPOI (.NET Port of POI) y seguí las acciones equivalentes que mencionas con la más mínima variación; Configuré FitHeight = 0 para que Excel haga "Ajustar todas las columnas en una página". ¡Trabajado como un encanto! ¡Gracias! – Rynkadink

+0

me ayuda (http://stackoverflow.com/a/12072291/3587592). – 0x5a4d

+2

Añadiendo sheet.setAutobreaks (true); before sheet.setFitToPage (verdadero); trabajó para mi. –

0

no funciona con poi-3.8 y Office 2013 trabaja con el formato xls

Si creo la hoja de poi, la configuración Don no funciona si abro/creo la hoja en Office Excel, y configuro la altura de la página desde Office Excel (digamos, a 2 páginas), y la guardo, y luego ejecuto el programa para leer esta hoja y configurar la altura/ancho (por ejemplo, 1 página), luego funciona.

parece que el registro no se escribe si generamos la hoja de poi. si el registro ya existe, entonces poi puede actualizarlo.

Otra cosa rara: generar xls desde poi - 6kb. abra el excel en la oficina y ahorre - 22 kb. abra Excel en la oficina, ajuste altura/ancho y guarde - 30 kb. definitivamente poi no está escribiendo el registro cuando genera el archivo. probablemente otra información también falta (22)

+1

¡Ja! ¿Por qué buscas una respuesta por días y luego cuando publicas una pregunta, llegas a la respuesta por ti mismo en segundos? ** sheet.setAutobreaks (true); ** es necesario para que la configuración funcione. – user3485166

Cuestiones relacionadas