2010-10-20 14 views
9

Sto usando Apache POI per creare fogli di calcolo xls. C'è un modo per rilevare se i dati si adattano in modalità verticale o se devo impostare il foglio in modalità orizzontale? So come impostare le modalità, ma non so come scoprire se i dati soddisfano l'attuale orientamento di stampa.Rileva l'orientamento di stampa necessario con Apache POI

risposta

4

Ho provato ma non vedo un modo per farlo funzionare.

Quando si crea la cartella di lavoro, poi si imposta automaticamente Altezza e Larghezza su 1 ciascuno.

Adatta altezza è il numero di pagine di alta per adattarsi foglio

e

Adatta larghezza è il numero di pagine larghe per adattarsi foglio

A meno che non si imposti l'altezza e la larghezza di stampa del foglio su un valore più elevato, ad esempio

sheet.getPrintSetup().setFitHeight((short)10); 

System.out.println (sheet.getPrintSetup().getFitWidth()); 
System.out.println (sheet.getPrintSetup().getFitHeight()); 

ritornano sempre 1 e 1

Il problema è Excel sarà sempre comprimere i dati (in termini di dimensioni zoom) fino al 10% per adattare il layout di pagina 1 x 1. [In MS_Excel, questo si presenta come Print Preview > Page Setup > Scaling > Down to X% of actual size]

Una volta che lo zoom è al 10%, quindi trabocca i dati nella pagina 2 e così via.

Ho provato un foglio con un sacco di dati e persino inviato un gran PrintArea

workBook.setPrintArea(
        0, //sheet index 
        0, //start column 
        50, //end column 
        0, //start row 
        520 //end row 
      ); 

su una varietà di formati di stampa.

sheet.getPrintSetup().setPaperSize((short)11); // A5 

Così il default stampabile zona/orientamento non vengono modificati se non vengono sostituite, in modo da non penso che i dati possono essere rilevati ad essere più grande dell'area di stampa - che è quello che si sta cercando di ottenere.

Questo potrebbe essere uno per le mailing list POI.

Aggiornamento per includere il collegamento a questa discussione sulle mailing list POI come già richiesto dall'OP.

http://mail-archives.apache.org/mod_mbox/poi-user/201010.mbox/%[email protected]%3e

+0

Ho già fatto questa domanda sul POI mailing list e non ha ottenuto una risposta. Oh beh ... forse la risposta è che non è possibile - come hai detto tu. Aspetterò un altro paio di giorni e vedrò se qualcuno si presenta con una soluzione (ne dubito comunque) – black666

5
HSSFPrintSetup printSetup = sheet.getPrintSetup(); 
    sheet.getPrintSetup().setFitWidth((short) 1); 
    sheet.getPrintSetup().setFitHeight((short) 0); 
    sheet.setAutobreaks(true); 
    printSetup .setLandscape(true); 

    HSSFFooter footer = wygSheet.getFooter(); 
    footer.setCenter("Page " + HSSFFooter.page() + " of "+ HSSFFooter.numPages()); 
+0

Non ha funzionato per me, ma se cambio setFitHeight a 1 da 0, allora ha funzionato –