2009-05-28 8 views
5

Je souhaite utiliser ADO.net pour extraire des données d'un fichier Excel. Ce processus est assez bien documenté sur Internet. Mon hic est que mon fichier a été téléchargé par un utilisateur, et n'existe donc que comme un tableau d'octets en mémoire. Pour des raisons de sécurité et de performance, je préfère ne pas écrire ce fichier sur le disque.Lire un fichier Excel en mémoire (tableau d'octets) avec ADO.NET?

Existe-t-il un moyen de construire une chaîne de connexion qui se connecte à un tableau d'octets? Ou peut-être exposer ce tableau comme un fichier qui est réellement stocké en mémoire (comme un disque RAM je suppose)?

+0

Quel type de-objet .NET qui vous tient en mémoire Excel- fichier? –

+0

C'est un tableau d'octets. Je vais mettre à jour la question. –

Répondre

5

Vous ne pouvez pas vous connecter s'il n'existe que dans la mémoire. OLE est également exclu (bien qu'utiliser Office Automation pour une application serveur soit de mauvaise conception pour commencer).

La seule façon que je peux penser est de lire les données Excel binaires vous - par exemple utiliser SpreadSheetGear.Net avec quelque chose comme:

SpreadsheetGear.Factory.GetWorkbookSet().Workbooks.OpenFromStream(*stream*); 
+0

SpreadsheetGear possède également une méthode IWorkbooks.OpenFromMemory (byte [] data) qui vous permet de lire directement à partir d'un tableau d'octets et d'un flux comme suggéré par David. –

2

Comme Rich B a dit dans sa réponse, je ne pense pas qu'il est possible de se connecter dans un bruit standard. façon nette d'un fichier Excel qui traîne en mémoire. La solution la plus simple serait probablement de sauvegarder le fichier Excel sur le disque, de s'y connecter en utilisant le moteur Jet avec votre chaîne de connexion, et lorsque vous aurez fini d'effectuer toutes vos tâches, débarrassez-vous du fichier. Ce n'est peut-être pas l'idéal en termes de performance, mais il manque un certain WTFiness qui vous ferait sortir les cheveux.

Questions connexes