C'è un problema XY che gira intorno a questa domanda. Proverò a rispondere ad entrambe le parti.
Dai commenti, il problema principale:
I am trying to ease the job of the people in my company who came to me requesting to find a better solution than using Excel spreadsheets to do various custom-product computations, that change frequently. They want to move away from Excel, and onto the web, and they want to be able to update formulas and variables themselves. Excel is not on the web and they have to pass excel sheets to each other each time they make a change, creating tons of outdated excel sheets in the process that linger on people's machines. I am to try and make this process better.
Questo è un problema di gestione dei contenuti, non di programmazione. Stai cercando soluzioni che implichino l'uso di Excel sul web. Un'opzione è una soluzione di gestione dei contenuti aziendali come Sharepoint. Un'altra è la Excel Web App . Questo è il problema che stai davvero cercando di risolvere: avere un'unica fonte coerente di dati e calcoli.
Ora, "proviamo a implementarlo in un'altra lingua". Le tue opzioni sono:
- La lingua piena non sicura con
eval
- Scrittura di un linguaggio specifico di dominio potente come Excel
Bisogna capire che il foglio di calcolo è, al suo centro, un linguaggio funzionale con equazioni e dati mappati su un piano cartesiano di righe e colonne.
Stai per correre a capofitto nella decima regola di Greenspun
Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.
Stai scrivendo un altro linguaggio funzionale in php (se sei fortunato - questo è per aiutare gli utenti a conservare il maggior numero di competenze da Excel a questa lingua). Stai cercando di farlo in modo che sia "sicuro" e "facilmente comprensibile da qualcuno che non ha più esperienza di programmazione rispetto alla scrittura di equazioni di Excel" (e privo della verifica utile che excel ti fornisce).
Stai andando a mantenere queste informazioni (il codice è dati) in un database (se sei fortunato - qualche altro data store se non lo sei) in qualche modo , tiralo fuori dalla persistenza , valuta tutto al volo, permetti a qualcuno di cambiare, la gestione dei contenuti in cima a quella (chi ha apportato la modifica?), e la possibilità di fare versioni anche una volta che hai finito il progetto.
La cosa che finirai per edificare per cercare di supportare il problema centrale non sarà piccola. Ogni volta che ti rivolgi agli utenti chiederai un'altra funzione da aggiungere . Potresti aggiungere ACCRINT
? Che ne dici di LINEST
? Come faccio a fare un LOOKUP
o VLOOKUP
in questa lingua?
Questa è una meravigliosa idea di avere un team di programmatori di talento su cui lavorare come prodotto da vendere. È un compito impossibile per un progetto collaterale per un singolo programmatore (o anche un piccolo team) con altre priorità e incendi in corso.
Non sto dicendo che non puoi farlo. Ma il problema che stai cercando di risolvere con questa soluzione non sarà nemmeno una soluzione adatta per i nastri adesivi per qualsiasi periodo di tempo ... e il supporto dell'applicazione ipotetica sarà un lavoro a tempo pieno.
Utilizza uno strumento esistente che risolva il tuo problema. Il suo prezzo è probabilmente una piccola frazione di un FTE.