Получить данные из загруженного файла Excel без сохранения в файловую систему

У меня есть требование разрешить пользователю этого веб-приложения ASP.NET загружать специально отформатированную электронную таблицу Excel, заполнять массивы данными из электронной таблицы и связывать массивы с хранимой процедурой Oracle для проверки и вставки в базу данных, Я должен иметь возможность читать данные из электронной таблицы Excel, не сохраняя их на жестком диске веб-сервера. Это та часть, которую я не могу понять, как это сделать. Вот простой пример кода.

<%--ASP.NET Declarative--%>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Send File" OnClick="Button1_Click" />

// C# Code-Behind
protected void Button1_Click(object sender, EventArgs e) {
    var postedFile = FileUpload1.PostedFile;

    // ... Read file in memory and put in format to send to stored procedure ...

}

Может ли кто-нибудь помочь мне с этим? Я ценю любое внимание.

спасибо,
Гейб

Ответ 1

Я нашел отличный легкий API с открытым исходным кодом на Codeplex для этого, который называется ExcelDataReader.

Он может преобразовать входной поток файла excel в объект System.Data.DataSet (возможно, синтаксический анализ с использованием спецификаций BIFF).

Здесь ссылка:

http://www.codeplex.com/ExcelDataReader

Вот пример кода:

<%--ASP.NET Declarative--%>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Send File" OnClick="Button1_Click" />
<asp:GridView ID="GridView1" runat="server" />

// C# Code-Behind
protected void Button1_Click(object sender, EventArgs e) {
    // the ExcelDataReader takes a System.IO.Stream object
    var excelReader = new ExcelDataReader(FileUpload1.FileContent);
    FileUpload1.FileContent.Close();

    DataSet wb = excelReader.WorkbookData;
    // get the first worksheet of the workbook
    DataTable dt = excelReader.WorkbookData.Tables[0];

    GridView1.DataSource = dt.AsDataView();
    GridView1.DataBind();
}

Ответ 2

Используйте FileUpload1. FileContent Stream. Думаю, ваша библиотека Excel может обрабатывать потоки напрямую.

Ответ 3

COM-библиотеки Excel не поддерживают загрузку файла из другого источника, кроме файла. Но существует множество сторонних компонентов, которые позволяют читать/записывать файлы excel.

Othervise вы можете увидеть документацию для формата файла XLS в [MS-XLS]: Формат двоичного файла Excel (.xls) Спецификация структуры.

Или вы можете использовать такой же способ обработки офисных файлов, как в Sharepoint Server. См. Пространство имен Microsoft.Office.Excel.Server.WebServices.

Ответ 4

возможно, посмотрите на csvreader, он читает csv, xls и xlsx:

http://www.csvreader.com

Ответ 5

Это то, с чем я недавно играл.

Отметьте этот пост: Напишите книгу Excel в поток памяти .NET

Это указывает на отличную библиотеку Карлоса Агилара Марса, которая позволяет работать с книгами Excel как XML.

ExcelXMLWriter

Вам не нужен Excel, установленный на сервере (который в любом случае нарушает лицензирование MS, поскольку вы обращаетесь к нему через Интернет).

Вы можете загрузить книгу Excel в виде потока с помощью Workbook.Load(stream)

Ответ 6

Не могли бы вы загрузить ваши CSV файлы? Работа с простым текстовым файлом будет намного проще. Раньше у меня была аналогичная проблема, и я спросил пользователей, и все было в порядке, спасло много работы.

Удачи.