2016-04-05 26 views
8

Ho un requisito per cui i file generati da POI Apache devono produrre un file con il set fit all columns on one page setting. Ho provato un sacco di varianti con l'API ma finora non sono stato in grado di farlo. Né posso davvero trovare se può essere fatto.POI Apache - come può impostare il file per l'impostazione "adatta tutte le colonne su una pagina" in Excel

Sembra che la funzione setFitToPage(true) riduca sia l'altezza che la larghezza non solo la larghezza come desidero. Usando setFitWidth e setFitHeight come trovo in varie altre domande di overflow dello stack non sembra influenzare nulla.

Ecco quello che ho finora:

public void setPrintSettings(Sheet sheet) { 

    sheet.setFitToPage(true); //this will resize both height and width to fit 
    sheet.getPrintSetup().setLandscape(true); 

    sheet.getPrintSetup().setFitWidth((short) 1); 
    sheet.getPrintSetup().setFitHeight((short) 1); 

} 
+0

Non sono esperto in POI Apache ma forse questo ti aiuta https://mail-archives.apache.org/mod_mbox/poi-user/201308.mbox/%[email protected] .yahoo.com% 3E – RubioRic

+0

Anche questo, RubioRic. Grazie, perché non l'ho trovato subito? – superbAfterSemperPhi

risposta

13

Non è la chiamata a setFitToPage(true) che rende Excel ridimensionare sia l'altezza e la larghezza per adattarsi a una pagina. Questa chiamata è necessaria, ma per un motivo diverso. Nella schermata Imposta pagina di Excel, questa chiamata al metodo controlla quale pulsante di opzione è attivo nella finestra di dialogo. Il valore true imposta il pulsante di opzione "Adatta a:", che consente di controllare le pagine di larghezza per pagina/e caselle alte. Il valore false imposta il pulsante di opzione per "Regola su:", percentuale di dimensioni normali.

In questo caso, si desidera adattarlo a 1 pagina di larghezza con le pagine "non importa" alte. Il valore da utilizzare per le pagine alte (metodo setFitHeight) è 0 qui.

sheet.setFitToPage(true); 
PrintSetup ps = sheet.getPrintSetup(); 
ps.setFitWidth((short) 1); 
ps.setFitHeight((short) 0); 

Quando scrivo un Workbook contenente un Sheet con queste impostazioni, e l'apro in Excel, la finestra di dialogo Imposta pagina ha il "Adatta a:" pulsante di opzione selezionato, e "1 pagina (s) largo di (bianco) alto ". Nella schermata "Anteprima di stampa", l'opzione delle impostazioni di stampa elenca "Adatta tutte le colonne su una pagina" come selezionato.

+1

Questo ha funzionato per me, ma ho anche dovuto aggiungere 'sheet.setAutobreaks (true);' per il foglio per passare all'opzione "Adatta a" Ridimensionamento. –

+0

Per me 'ps.setFitWidth ((short) 1);' 'ps.setFitHeight ((short) 1);' cosa è stato eseguito. – SiGe