Получить данные из загруженного файла 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 файлы? Работа с простым текстовым файлом будет намного проще. Раньше у меня была аналогичная проблема, и я спросил пользователей, и все было в порядке, спасло много работы.
Удачи.