Читать файл Excel в памяти (байтовый массив) с ADO.NET? - PullRequest
5 голосов
/ 28 мая 2009

Я хочу использовать ADO.net для извлечения некоторых данных из файла Excel. Этот процесс довольно хорошо задокументирован в интернете. Моя проблема в том, что мой файл был загружен пользователем и поэтому существует только как байтовый массив в памяти. Из соображений безопасности и производительности я не хотел бы записывать этот файл на диск.

Есть ли способ построения строки подключения, которая подключается к байтовому массиву? Или, возможно, выставить этот массив как файл, который на самом деле хранится в памяти (например, как RAM-диск)?

Ответы [ 3 ]

5 голосов
/ 28 мая 2009

Вы не можете подключиться, если он существует только в памяти. OLE также исключается (хотя использование Office Automation для серверного приложения изначально неэффективно).

Единственный способ, которым я могу придумать, - это прочитать двоичные данные Excel самостоятельно - например, использовать SpreadSheetGear.Net с чем-то вроде:

SpreadsheetGear.Factory.GetWorkbookSet().Workbooks.OpenFromStream(*stream*);
2 голосов
/ 28 мая 2009

Как сказал Рич Б в своем ответе, я не думаю, что можно стандартным способом ado.net подключиться к файлу Excel, который просто висит в памяти. Самый простой обходной путь, вероятно, состоит в том, чтобы на самом деле сохранить файл Excel на диск, подключиться к нему с помощью Jet Engine с помощью строки подключения, а затем, когда вы закончите выполнять все свои задачи, избавиться от файла. Это не может быть идеальным с точки зрения производительности, но ему не хватает той определенной WTFiness, которая заставила бы вас вырвать волосы.

1 голос
/ 28 мая 2009

Я не думаю, что это можно сделать только через строку подключения.

Если вам нужна помощь с файлом Excel на диске: http://connectionstrings.com/excel-2007

В целом: http://connectionstrings.com/

...