Получить данные из загруженного файла Excel без сохранения в файловой системе - PullRequest
10 голосов
/ 04 ноября 2008

У меня есть требование разрешить пользователю этого веб-приложения 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 ...

}

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

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

Ответы [ 6 ]

8 голосов
/ 06 ноября 2008

Я нашел отличный облегченный 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();
}
3 голосов
/ 04 ноября 2008

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

1 голос
/ 05 ноября 2008

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

http://www.csvreader.com

1 голос
/ 04 ноября 2008

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

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

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

0 голосов
/ 04 ноября 2008

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

Удачи.

0 голосов
/ 04 ноября 2008

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

Проверьте это сообщение: Запишите книгу Excel в поток памяти .NET

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

ExcelXMLWriter

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

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

...