2010-11-02 14 views
7

Esiste un modo per interrogare un foglio di calcolo Excel 2010, senza utilizzare Jet o esportare come CSV e interrogare il file csv.Foglio di calcolo Excel di query con C# .NET senza utilizzare Jet OLE DB

Il motivo per cui non riesco a utilizzare Jet è perché l'applicazione deve essere eseguita come servizio Web, su Windows Server 2008 R2, senza supporto a 32 bit, quindi Jet non funzionerà. Questo è un dato, poiché WOW 64 non è installato sul server di destinazione.

This thread suggerisce di utilizzare un computer proxy a 32 bit, ma anche questa non è un'opzione.

Ulteriori informazioni: Il server esegue SharePoint 2010.

Grazie,

JD

+2

Non puoi semplicemente importare il foglio di calcolo Excel in un database "reale"? Dato che stai scrivendo un servizio web, probabilmente avrai qualche problema con la concorrenza, se mantieni l'origine dati come un file Excel ... Quindi potresti pianificare un lavoro per aggiornare la tabella del server SQL di volta in volta. – rsenna

+0

No. È un requisito aziendale che le informazioni vengano memorizzate nel file excel. Non è la mia scelta ... – Darbio

+0

Non sapevo che fosse possibile escludere WOW64 dall'installazione - nella mia esperienza qualsiasi programma a 32 bit viene eseguito su una macchina a 64 bit - presumibilmente WOW64 è lì ma non lo si nota nemmeno. – markmnl

risposta

12

Sì - è possibile utilizzare Excel.Interop - riferimento dal vostro programma C# con l'aggiunta di un riferimento al Microsoft.Office.Interop.Excel (versione 13 penso per Excel 2010) nella scheda .Net della finestra di dialogo Aggiungi riferimento VS.

FYI: sua non è una buona idea eseguire daemon su un server utilizzando Interop: http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757#kb2, se si tratta di un breve programma in esecuzione, eseguito da un utente e di monitorare, dovrebbe essere ok ..

Se volete che i vostri clienti per eseguire il programma di cui avranno bisogno per installare il Primary Interop Assemblies (PIA di) se they didnt già durante l'installazione di ufficio, che può essere ottenuto qui:

XP: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=C41BD61E-3060-4F71-A6B4-01FEBA508E52
2003: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=3C9A983A-AC14-4125-8BA0-D36D67E0F4AD
2007: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=59DAEBAA-BED4-4282-A28C-B864D8BFA513
2010: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=938fe8ad-583b-4bd7-a345-23250dc15855

Sono stato con Office11 sulla mia macchina x64 Vista in modo da non penso x64 porrà alcun problema.

Attenzione, la documentazione è terribile! ci sono circa 10 diverse versioni dell'aiuto, la documentazione là fuori. Mi raccomando:

familiarizzare con il:

  • Applicazione
  • Workbook
  • Foglio
  • Gamma

oggetti. È possibile leggere i dati in una lista <stringa> > (nel qual caso tutte le celle dovrebbero essere formattate come testo) o qualcosa in memoria, quindi non è necessario gestire Interop e il relativo v. Da C# utilizzare sempre un metodo (alcuni documenti indicano erroneamente che non è possibile utilizzare i metodi per uso interno) come ad esempio: Range.get_Values ​​("A1") in contrapposizione a: intervallo .Le cellule;

Un buon punto di partenza è qui: http://dotnetperls.com/excel-interop

La documentazione ufficiale è qui: http://msdn.microsoft.com/en-us/library/bb726434(v=office.12).aspx, ma contiene un carico di commercializzazione cialda fino ad arrivare alle parti della libreria di interoperabilità che sono di dieci anni.

E attenzione: gli indici di Excel sono basati su 1, ovvero il primo elemento nell'array 2D restituito inizia da my2DArray [1,1]!

+0

Questo era ciò che stavo per suggerire. 64 bit potrebbe rappresentare una ruga o due, ma dovrebbe funzionare. – winwaed

+0

Brillante! L'unica cosa è che questo richiede una copia di Office 2010 installata sul server, che non è l'ideale - ma sono sicuro che funzionerà. Grazie. – Darbio

+0

Penso che, qualunque sia la vostra decisione, avrete bisogno di almeno alcuni componenti di Office. – winwaed

4

Oltre a Excel.Interop, è possibile utilizzare ADO.Net per utilizzare il motore ACE anziché il precedente motore JET? ACE è stato introdotto con Excel/Access 2007 ed è destinato a sostituire JET.

1

Ecco un altro pacchetto partito 3 °, che è appena stato suggerito a me da un collega: Aspose Excel Spreadsheet Components

Sembra che questo sarà ridurre la necessità di interoperabilità e di dover avere installato l'ufficio PIA.

Non ci sono prezzi però, quindi potrebbe non essere economico.

+0

Penso che i componenti originali Microsoft saranno più affidabili e non ci dovrebbe essere un problema di costi perché è già un server basato su Microsoft, ad es. Non è come se fosse un box Linux che sta forzando l'uso di componenti di terze parti. – winwaed

+1

Come indicato sopra, richiede l'installazione di Office 2010 sul server, pertanto sono presenti problemi di costo associati all'utilizzo di un approccio di interoperabilità (poiché è necessaria una licenza Microsoft per utilizzare Office). In secondo luogo, il pacchetto che ho suggerito è una DLL a ingombro ridotto, più adatta a un ambiente server in cui potrebbe non essere possibile/desiderato installare Office 2010. – Darbio

4

Ho affrontato anche questo. La mia situazione: applicazione client non banale che deve essere eseguita su Windows 7 x64 e x86. Necessità di estrarre dati da fogli di calcolo Excel; nessuna flessibilità e minimo "dolore dell'utente" richiesto. ACEDB (Redistore del motore di database di accesso.) Non lo ha fatto, dal momento che apparentemente la versione x64 di quello non può essere installata quando Office x86 (32 bit) è già installato. PIA non era un'opzione - "dolore utente minimo".

Ho usato questa libreria: http://npoi.codeplex.com

Viene fornito con campioni estesi e sono stato in grado di costruire l'applicazione per "Any CPU", piuttosto che limitare a 86, che ha causato problemi con altre DLL di terze parti siamo stati cercando di usare Ero in servizio con NPOI in circa 10 minuti, quindi posso sicuramente consigliarlo.

Problemi correlati