2012-04-09 7 views
8

Sto provando a creare alcuni file xlsx utilizzando la libreria POI Apache per Java e tutto ciò che serve per creare file funziona correttamente.Problemi di adattamento del foglio a una singola pagina nei file xlsx utilizzando la libreria POI Apache

Il problema si presenta quando voglio stampare quei file usando una stampante fisica. Voglio rendere ogni foglio delle mie cartelle di lavoro adatto a una singola pagina. Mi guardai intorno nella documentazione e il codice seguente sarei dovuto lavorare:

 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(); 

Ma non ... Quando provo a stamparlo, stampa a tre fogli (che cosa sarebbe effettivamente supporre per stampare se non ho usato la parte PrintSetup). Quindi il codice non fa proprio niente.

Qualcuno può dirmi cosa c'è di sbagliato in quel codice?

Inoltre, ho un'altra domanda sulla stampa di file xlsx: voglio sapere se c'è un modo per stampare i file xlsx dal mio programma Java senza realmente aprire i file e fare clic su stampa? Come wb.printAllSheetsInWorkbook(); o qualcosa del genere.

risposta

19

Dopo

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

Usa

sheet.setFitToPage(true); 
+0

L'ho trovato mentre cercavo un problema simile ma utilizzando NPOI (porta .NET di POI) e ho seguito le azioni equivalenti che hai citato con la minima variazione; Ho impostato FitHeight = 0 in modo che Excel esegua "Adatta tutte le colonne in una pagina". Ha funzionato come un fascino! Grazie! – Rynkadink

+0

Mi aiuta (http://stackoverflow.com/a/12072291/3587592). – 0x5a4d

+2

Aggiunta di sheet.setAutobreaks (true); before sheet.setFitToPage (true); ha funzionato per me –

0

non funziona con POI-3.8 e l'ufficio 2013 lavora con il formato xls

se creo il foglio dal poi, le impostazioni di don lavorare se apro/creo il foglio in ufficio eccetto, e settiamo l'altezza della pagina da ufficio eccetto (diciamo, a 2 pagine), e salvo, e poi eseguo il programma per leggere questo foglio e impostare l'altezza/larghezza (per esempio, per 1 pagina), quindi funziona.

sembra che il record non venga scritto se si genera il foglio da poi. se il record esiste già, quindi poi è in grado di aggiornarlo.

Un'altra cosa strana: generare xls da poi - 6kb. aprire l'excel in ufficio e salvare - 22 kb. aprire l'Excel in ufficio, regolare l'altezza/larghezza e salvare - 30 kb. sicuramente poi non sta scrivendo il record quando genera il file. Probabilmente mancano anche altre informazioni (22)

+1

Ha! perché cerchi una risposta per giorni e poi quando invii una domanda, ottieni la risposta da te in pochi secondi! ** sheet.setAutobreaks (true); ** è necessario affinché l'impostazione funzioni. – user3485166

Problemi correlati