Читать файл Excel в памяти (массив байтов) с помощью ADO.NET?

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

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


person Jack Ryan    schedule 28.05.2009    source источник
comment
Какой тип .NET-объекта хранит у вас в памяти Excel-файл?   -  person Seb Nilsson    schedule 28.05.2009
comment
Это массив байтов. Я обновлю вопрос.   -  person Jack Ryan    schedule 28.05.2009


Ответы (3)


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

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

SpreadsheetGear.Factory.GetWorkbookSet().Workbooks.OpenFromStream(*stream*);
person David    schedule 28.05.2009
comment
SpreadsheetGear также имеет метод IWorkbooks.OpenFromMemory(byte[] data), поэтому вы можете читать непосредственно из массива байтов, а также из потока, как предложил Дэвид. - person Joe Erickson; 28.05.2009

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

person TheTXI    schedule 28.05.2009

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

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

В общем случае: http://connectionstrings.com/

person GEOCHET    schedule 28.05.2009