Disegni per l'output in un foglio di calcolo

1

Sto lavorando a un progetto in cui abbiamo il compito di raccogliere e stampare vari dati su un foglio di calcolo.

Stiamo avendo un sacco di problemi con il file che contiene il codice per scrivere il foglio di calcolo. La cella a cui appartengono i dati è hardcoded, quindi ogni volta che è necessario aggiungere qualcosa al centro del foglio di calcolo, è necessario incrementare il percorso per tutti i campi dopo quello nel codice. Ci sono righe vuote casuali, per aggiungere padding tra sezioni e sottosezioni all'interno delle sezioni, quindi non esiste un modello reale che possiamo replicare. In sostanza, ogni volta che dobbiamo aggiungere o modificare qualcosa al foglio di lavoro, sono necessarie molte ore lunghe e noiose.

Il codice è tutto in questo unico file, intrecciato insieme a straordinari in Perl. Ho trovato alcune soluzioni OO, ma non ho molta familiarità con la programmazione OO in Perl e tutti i miei tentativi non sono stati grandi, quindi ho evitato di farlo finora. Ho suggerito di gestire questa sezione del programma con un linguaggio OO più amichevole, ma non possiamo a quanto pare. Ho anche suggerito di eliminare l'intera idea del foglio di calcolo e di passare a una pagina web, ma non possiamo farlo neanche.

Abbiamo lavorato a questo progetto per alcuni mesi, e ogni volta che dobbiamo modificare quel file, lo temiamo tutti. Sto pensando che sia ora di iniziare un po 'di refactoring. Tuttavia, non so nemmeno cosa potrebbe rendere questo file più facile da utilizzare. Il modo in cui l'output è formattato fa in modo che debba essere un po 'hardcoded.

Mi chiedo se qualcuno abbia idea di eventuali modelli o tecniche di progettazione che hanno usato per affrontare un problema simile. Sono aperto a qualsiasi idea. Le risposte specifiche Perl sono benvenute, ma mi interessano anche le soluzioni indipendenti dalla lingua.

    
posta Austin Moore 27.05.2014 - 16:31
fonte

4 risposte

1

Questo problema non è così grave perché il codice errato produce solo un singolo output.

The cell that the data belongs to is hardcoded, so anytime you need to add anything to the middle of the spreadsheet, you have to increment the location for all the fields after that in the code.

Ah .. la radice del problema. Questo è un enorme WTF. Il codice corrente è stato scritto da un novizio ed è irrinunciabile. Devi eliminare l'hard-coding e utilizzare alcune variabili per tenere traccia di dove va ogni dato. Se questo fosse il mio problema, vorrei semplicemente riscrivere l'intera funzione da zero usando il codice esistente come riferimento. Il mio primo pensiero è quello di riempire il foglio di calcolo riga per riga tenendo traccia della riga corrente.

    
risposta data 19.08.2014 - 07:27
fonte
1

Spreadsheet :: WriteExcel scrive file XLS, che io uso. Spreadsheet :: WriteXLSX scrive file XLSX. Spreadsheet :: WriteExcel non viene più sviluppato ma è ancora uno strumento reale. (Alcuni dei nostri clienti sono molto indietro rispetto alla curva tecnologica, quindi i file XLS sembravano un buon comune denominatore, e non ho bisogno di una Ferrari per ottenere la spesa, né abbiamo soldi per una Ferrari.)

In entrambi è possibile specificare quale cella scrivere. Nel mio caso, tutti i fogli di calcolo che emetto vengono emessi in sequenza, riga per riga, non indirizzando le celle. I miei fogli di lavoro sono rapporti di riepilogo per i dirigenti e sono divisi in sezioni, e c'è un numero variabile di righe per ogni sezione.

La cosa bella di entrambi i moduli Perl è che puoi aggiungere la formattazione a singole celle quando scrivi ogni cella.

Ora, anche questo potrebbe essere un problema di gestione. Se ci vogliono 200 ore per mantenere Perl e fare la stessa cosa, e 30 ore per poter utilizzare uno strumento che già conosci per dare lo stesso risultato, e tu lo hai detto alla direzione, questo è un problema di gestione. Il manager non capisce come funziona l'efficienza e risparmiando denaro. Nel mio caso, Perl può fare MOLTE cose che i nostri altri strumenti non possono fare.

IMO, l'apprendimento di Perl OO vale la pena dato che puoi utilizzare molti moduli a portata di mano, la maggior parte dei moduli è scritta in questo modo.

La mia risposta: riscrivi le sezioni del codice esistente per utilizzare Spreadsheet :: WriteExcel. Testare accuratamente la subroutine, quindi metterla in produzione. Quindi ripetere con una nuova sezione di codice / subroutine. Quando ottieni uno strumento che funziona, ne vale davvero la pena. Perl è uno di questi strumenti.

    
risposta data 25.10.2014 - 16:35
fonte
0

A seconda della libreria che si sta utilizzando, è possibile assegnare un nome agli intervalli / alle celle specifici a cui vengono inviati i dati, quindi nel codice basta fare riferimento a tali nomi. In questo modo, se il design del foglio di calcolo del modello cambia, non è necessario modificare alcun codice.

So che funziona con PHPExcel, potrebbe funzionare anche in Perl. In caso contrario, potresti sempre scrivere uno script PHP con cui Perl lavora.

    
risposta data 27.05.2014 - 16:51
fonte
0

Il timore di modifiche a un particolare codice base o modulo è di solito un segnale che il refactoring deve essere preso seriamente in considerazione.

Non sono sicuro del motivo per cui ritieni che il tuo formato di output richieda la necessità di alcuni hardcoding. È sempre stata la mia esperienza che il templating (preferibilmente come parte di un più ampio sforzo per separare correttamente il formato di output dal codice) è sempre possibile, e che le complicazioni derivano solitamente da cattive strutturazioni di codice e pratiche di codifica in passato, che ancora una volta garantisce il fissaggio e / o refactoring.

Un problema comune con i principali processi di refactoring è che spesso rappresentano un notevole investimento di risorse che non si traducono immediatamente in migliori linee di fondo per il cliente o il datore di lavoro. Tuttavia, a meno che il futuro previsto del codice precedente non sia limitato, di solito è necessario fare un caso per i futuri risparmi sulla manutenzione e l'espansione del codice esistente. Naturalmente YMMV, ma in generale paga per ristrutturare e modulare i principali blocchi di codice legacy (anche se ciò richiede un considerevole refactoring) in modo da renderlo a prova di futuro in termini di manutenzione e sviluppo continuo.

    
risposta data 19.08.2014 - 13:22
fonte

Leggi altre domande sui tag