从没有保存到文件系统的上传的Excel文件获取数据

我有一个要求,允许此ASP.NET Web应用程序的用户上载特定格式的Excel电子表格,填充电子表格中的数据数组,并将数组绑定到Oracle存储过程进行validation和插入数据库。 我必须能够从Excel电子表格中读取数据,而不能将其保存到Web服务器的硬盘上。 这是我无法弄清楚如何去做的部分。 这是一个简单的代码示例。

<%--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 ... } 

谁能帮我这个? 我感谢任何人的考虑。

谢谢,
加布

我在Codeplex上发现了一个很好的轻量级开放源代码API,用于这样做的ExcelDataReader。

它可以将excel文件的inputstream转换成System.Data.DataSet对象(可能使用BIFF规范parsing)。

这是链接:

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(); } 

使用FileUpload1。 FileContentstream。 我想你的Excel库可以直接处理stream。

Excel的COM库不支持从文件以外的其他来源加载文件。 但是存在很多的第三方组件,可以让你读写excel文件。

另外你可以在[MS-XLS]:Excel二进制文件格式(.xls)结构规范中看到XLS文件格式的文档。

或者,您可以像在Sharepoint Server中一样使用相同的办公室文件处理方式。 请参阅Microsoft.Office.Excel.Server.WebServices命名空间 。

也许看看csvreader,它读取csv,xls和xlsx:

http://www.csvreader.com

这是我最近一直在玩的东西。

检查这个职位: 写一个Excel工作簿到一个内存stream.NET

它指向了Carlos Aguilar Mares的一个伟大的图书馆,它使您能够将Excel工作簿用作XML。

ExcelXMLWriter

你不需要在服务器上安装Excel(当你通过networking访问时,这有点违反了MS许可证)。

您可以使用Workbook.Load(stream)作为stream加载Excel工作Workbook.Load(stream)

你可以让你的用户上传一个CSV文件吗? 处理纯文本文件会容易得多。 之前我也有过类似的问题,我问过用户,他们没问题,为我节省了大量的工作。

祝你好运。