2012-07-26 13 views
25

Sto tentando di creare un foglio di calcolo Excel utilizzando BIRT. Il foglio di calcolo è una tabella a campi incrociati che associa due oggetti insieme. Il numero di righe e colonne è dinamico in base ai valori in un database MySQL. Attualmente ho un'implementazione funzionante del report per l'output PDF. Ora sto cercando di creare una seconda versione del report per Excel.Perché il mio Crosstab viene troncato in Excel?

Ho copiato il design del report e ho iniziato a regolarlo per funzionare con Excel. Tutto sembra a posto, ma solo le prime 3 colonne vengono visualizzate dopo l'intestazione. Tutte le righe appaiono correttamente.

Ho provato quanto segue:

  • Ho provato a regolare Overflow Visibile su ogni elemento della pagina. Questo non ha avuto alcun effetto.
  • Ho provato a impostare l'altezza e la larghezza della pagina master in valori ridicolmente grandi. Tutte le informazioni visualizzate correttamente, ma spero in una soluzione senza valori hard coded. In futuro, la larghezza dei dati potrebbe superare nuovamente il mio valore arbitrario ed essere troncata.

sono costretto nei seguenti modi:

  • io non sono in grado di passare i motori di reporting (devo usare BIRT).
  • Non riesco a cambiare gli emettitori di Excel.
  • ingresso

Questo blog cita il mio problema: http://www.spudsoft.co.uk/2011/10/the-spudsoft-birt-excel-emitters/ ma non offre una soluzione diversa da un interruttore emettitore. La citazione specifica è "I file hanno anche problemi con il layout della pagina che non ho potuto aggirare (in particolare i report ampi sarebbero troncati)."

Oltre il post di un blog, il mio googlefu mi ha deluso. Qualsiasi aiuto è apprezzato! Grazie!

+1

Suggerirei di caricare un file di esempio da qualche parte dell'output del BIRT, come lo vedi in Excel e come vorresti vederlo, in modo che possiamo lavorare con qualcosa. Evitare i dati personali/sensibili e pubblicare un collegamento di visualizzazione/download – Apostolos55

+0

Sfortunatamente, non sono più nella società per cui stavo lavorando quando ho fatto questa domanda. Lo farei sicuramente se lo fossi. Dal momento che non lo sono, non ho più accesso al codice che causa il problema o all'output risultante. Credo che abbiamo finito per utilizzare la "soluzione" di larghezza arbitrariamente grande. Non ero davvero soddisfatto, ma ha funzionato abbastanza bene al momento. – radicaledward101

+1

Questa domanda dovrebbe essere chiusa, in generale BIRT esporterà tutte le colonne per eccellere, anche con l'emmitter out of the box. Questa è una domanda una tantum su un problema specifico in un rapporto, in cui il rapporto non è disponibile per la risoluzione dei problemi. Quindi non è possibile rispondere a questa domanda. –

risposta

4

Ci sono due domande qui. Il primo è relativamente facile, il secondo è complesso.

1. Perché la mia scheda croce viene troncata in Excel?

2.Come regolare dinamicamente l'ampiezza della pagina master in base al numero di colonne nel report in fase di esecuzione?

A1: La scheda Trasversale viene interrotta perché le larghezze delle colonne sono state impostate manualmente, dove il numero di colonne si espanderà oltre la larghezza impostata della pagina Master. Ogni volta che si riprende l'elemento di progettazione del report e si regola, BIRT presuppone che tu sappia cosa stai facendo e non sovrascrive le tue impostazioni.

La soluzione è ricreare l'elemento del report (tabella o croce) e non modificare manualmente le dimensioni. Quando vengono eseguiti in HTML o Excel, tutte le colonne verranno automaticamente impostate per essere visualizzate nella larghezza della pagina mastro disponibile.

Screen shot di un BIRT 4.2 Tab Croce, Riporta articolo con una larghezza di pagina master 2 pollici e 30 colonne

Two Inch by 30 Columns

A2: Questo non è facile, e non fornirà la risposta a questa volta. Indicherò la soluzione e individuerò un paio di blocchi stradali. Una soluzione valida a questa domanda deve includere una soluzione funzionante che utilizza il database di esempio.

(come di BIRT 4.2.1)

Challenge1 - La pagina Larghezza Master sorge BIRT Report Scripting in eventi che precede la relazione tabella o Croce voce Tab in fase di completamento. Non puoi semplicemente contare quante colonne ci sono nel rapporto;

Se si voleva contare, colonne -

progettazione di report intialize

columnCount = 0; 

Tab Croce, onCreate

columnCount ++; 

Nella mia ricerca ci sono due percorsi suggeriti per il conteggio colonne preventiva all'elemento Tab incrociato creato. In entrambi i

  1. eseguire il set di dati nel beforeFactory (questo significa due query al database, uno a contare e uno per il rapporto), quindi ottenere un conteggio e usarlo.

  2. Calcolare il valore nella query iniziale e raccoglierlo nel dataset, onFetch.

Ho seguito l'opzione Data Set, onFetch, utilizzando una colonna calcolata ma non è riuscita a farlo funzionare.

Sfida2 - La proprietà Larghezza della pagina mastro deve essere impostata sopra o prima del disegno del rapporto, prima del rango. Con il beforeFactory è il più spesso raccomandato. Inoltre, la proprietà Larghezza della pagina master è disponibile solo quando il "Tipo" della pagina master è impostato su "Personalizzato", nei miei tentativi l'ho impostato manualmente nell'Editor delle proprietà Generale.

Il passaggio dei valori da onFetch a beforeFactory deve essere eseguito utilizzando PersistentGlobalVariable che può solo passare stringhe, non interi. Ho trovato tutti i modi in cui questo non funziona. Anche passando "12in" in PersistentGlobalVariable non è riuscito a regolare la pagina master Larghezza

Uno di questi codici in beforeFactory regolerà la larghezza della pagina Master (quando Tipo = personalizzato)

passare il valore

reportContext.getReportRunnable().designHandle.getDesignHandle().findMasterPage("Simple MasterPage").setProperty("width","12in"); 

calcolare un valore e passarlo

increaseWidth = 20; 
reportContext.getReportRunnable().designHandle.getDesignHandle().findMasterPage("Simple MasterPage").setProperty("width",((2+increaseWidth)+"in")); 

alla fine sono stato in grado di trovare o creare un rapporto funzionale che regola la pagina master W idth passato sulle colonne numeriche generate in fase di esecuzione del report. Penso che sia possibile, ma farlo va oltre le mie attuali competenze.

Problemi correlati