VB.NET, Excel Interop e compagnia cantante...

giovedì 10 dicembre 2009 - 17.09

MagoDaniel1981 Profilo | Newbie

Buongiorno,
ho un semplice dubbio: ho realizzato un'applicazione VB.NET che, sfruttando le librerie Excel 2007 installate sul mio computer, manipola un file di Excel con un formato più o meno predefinito realizzando così un file Ex-Novo secondo specifiche date dal Cliente. Bene: il programma funziona solo sul mio computer, o comunque credo un computer dove vi è installato Office 12 (2007). Il Cliente infatti l'ha testato su un computer dove vi è in esecuzione Excel 11 (2003) e il programma non funziona.

Domanda: come devo fare per creare un pacchetto di installazione che si porti dietro i file giusti? Io ho aggiunto nei riferimento del progetto tutto il necessario, è ho specificato nelle impostazioni di pubblicazione, di copiare localmente tutti i file necessari. Infatti vedo che nella cartella del pacchetto di installazione vengono esportati (insieme agli altri) i seguenti file:

Microsoft.Office.Interop.Excel.dll.deply
Microsoft.Vbe.Interop.Dll.depoy

ma a quanto pare se nel computer di destinazione non c'è Excel 12 il software non elabora e nemmeno apre i file da elaborare.

E' possibile aggirare questo problema o deve necessariamente esserci il pacchetto Office 2007? Inoltre, siccome il Cliente usa il 2003 ho pensato di includere le librerie di Office 2003 ma logicamente sul mio computer non compaiono in quanto non installato. Che devo fare?

Grazie a chiunque saprà essermi di aiuto.

Un buon lavoro a tutti.
Daniel Grandis

Gluck74 Profilo | Guru

ho avuto lo stesso problema ma su web, dove, ovviamente, sul server web di produzione non esisteva office, anche se era una semplice intranet.

Non saprei bene risolvere il tuo problema senza fare prima prove ed approfondire l'argomento, però mi è vanuta in mente un'idea che potresti provare velocemente.

Il tuo programma dovrebbe controllare la presenza di office e di excel (trovi gli script facilmente), e capire quale versione sia installata.
A quel punto con reflaction carichi la dll giusta, istanzi le classi che ti servono e le utilizzi.
dovrebbe andare.

Comunque sia deve essere installato office, altrimenti le interop non funzionano. Correggetemi se sbaglio

MagoDaniel1981 Profilo | Newbie

Ok, ma come faccio a scegliere le librerie da usare? Si tratta immagino di fare un import condizionato un funzione di cosa trovo installato sul pc Client che eseguirà l'applicazioen (è un WinForm). MA io in locale dove ho sviluppato il programma non ho Office 11 (2003). Quindi?

Grazie per l'interessamente intanto e buon lavoro.

Daniel

MagoDaniel1981 Profilo | Newbie

--------------------------------------------------------------------------------
16/12/2009
Posto soluzione per chi ne avesse bisogno...

Invece di creare l'oggetto Excel.Application, Excel.Workbook e Worksheet, dichiarateli semplicemente come Object. Poi utilizzate il metodo CreateObject("Excel.Application") in questo modo viene utilizzata la versione di Excel presente ed installata sul computer in uso.

Spero un giorno possa essere utile a qualcuno.

Buon lavoro.
Daniel Grandis
--------------------------------------------------------------------------------

Gluck74 Profilo | Guru

Questa non la sapevo proprio...
fighissima e semplicissima.
Complimenti.

kit Profilo | Newbie

Ciao Gluck74,
ho il tuo stesso problema come l'hai risolto? sul server di produzione non ho excel :(
Grazie!

Gluck74 Profilo | Guru

>Ciao Gluck74,
>ho il tuo stesso problema come l'hai risolto? sul server di produzione
>non ho excel :(
>Grazie!

ciao kit,
come avrai già visto, il post è del 2009. Da quel tempo ad ora possiamo dire che è tutto cambiato!!!!!!!!
Inoltre io in questi anni ho sviluppato applicazioni web, e ti saprei dire la soluzione esatta per quel contesto.

Se hai voglia di spiegarmi il tuo problema ed il tuo contesto, sarò felice di aiutarti.

ciao
____________
http://glucolo.wordpress.com
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

kit Profilo | Newbie

Ciao,
veramente non ci avevo fatto caso alla data :)
Comunque il problema è lo stesso lato web.
Su sharepoint 2010 mi serve leggere un excel da una libreria, inserirci dati (presi da una lista) e salvarlo con un altro nome (sempre lo stesso, riscritto da più persone), in pratica fare un report dei dati che ho nella lista.
Con gli excel services funziona (e sembra non avere problemi di concorrenza sul file) ma è lento, ci mette circa 1 minuto a farlo di cui 20-25 secondo per aprire l'excel (template) e 30-35 per inserire i dati, dopo salva la copia e chiude il template senza salvarlo in poco tempo.
Ho provato con l'interop e funziona benissimo, ci mette solo alcuni secondi, ma su produzione, non essendoci excel installato, non posso utilizzarlo.
Grazie!
Ciao

Gluck74 Profilo | Guru

sharepoint.......... LO ODIOOOOOOOOOOOO

Comunque sia, gli ExcelServices funzionano bene, anche se si, sono un po' lenti.
Potrebbe anche dipendere dalla configurazione degli ExcelServices, visto che non è facile farla. Dovresti sentire un esperto di questo argomento.
domandina: ma la lentezza la riscontri anche in produzione?

Un'altra alternativa è quella di utilizzare le librerie Openx XML Document, o qualcosa di già pronto per facilitarti il compito, ma non so dentro un contesto SharePoint, quanto sia possibile.

Ecco alcuni riferimenti:
http://openxmldeveloper.org/resources/workshop/m/hols/default.aspx?GalleryPostSort=Downloads&PageIndex=1
http://msdn.microsoft.com/en-us/library/documentformat.openxml.wordprocessing.document.aspx
http://www.gemboxsoftware.com/document/overview
____________
http://glucolo.wordpress.com
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

kit Profilo | Newbie

ehm...si un pochino anch'io :)
Si il problema c'è sia in sviluppo che in produzione.
Ho letto qualcosa su Openx XML vedrò di fare qualche prova :)
grazie!!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5