C# 从上载的Excel文件中获取数据,而不保存到文件系统

C# 从上载的Excel文件中获取数据,而不保存到文件系统,c#,asp.net,excel,web-applications,file-upload,C#,Asp.net,Excel,Web Applications,File Upload,我需要允许此ASP.NET web应用程序的用户上载特定格式的Excel电子表格,用电子表格中的数据填充数组,并将数组绑定到Oracle存储过程以进行验证并插入数据库。我必须能够从Excel电子表格中读取数据,而不必将其保存到web服务器的硬盘。这是我不知道该怎么做的部分。下面是一个简单的代码示例 <%--ASP.NET Declarative--%> <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:B

我需要允许此ASP.NET web应用程序的用户上载特定格式的Excel电子表格,用电子表格中的数据填充数组,并将数组绑定到Oracle存储过程以进行验证并插入数据库。我必须能够从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 ...

}

//C#代码隐藏
受保护的无效按钮1\u单击(对象发送者,事件参数e){
var postedFile=FileUpload1.postedFile;
//…读取内存中的文件并将其格式发送到存储过程。。。
}
有人能帮我吗?我感谢任何人的关心

thx,

gabe

使用文件上传1。流动我想您的Excel库可以直接处理流

Excel的COM库不支持从文件以外的其他源加载文件。 但是有很多第三方组件,允许您读/写excel文件

另外,您可以在中查看th XLS文件格式的文档


也可以使用与Sharepoint Server中相同的office文件处理方法。看。

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

查看此帖子:

它指向Carlos Aguilar Mares的一个很棒的库,它允许您以XML的形式使用Excel工作簿

您不需要在服务器上安装Excel(这在某种程度上破坏了MS授权,因为您正在通过web访问它)


您可以使用
工作簿将Excel工作簿作为流加载。加载(流)

您可以让用户上传CSV文件吗?处理纯文本文件会容易得多。我以前也遇到过类似的问题,我问过用户,他们都很好,为我节省了大量的工作


祝你好运。

也许你可以看看csvreader,上面写着csv、xls和xlsx:


我在Codeplex上找到了一个很棒的轻量级开源API,名为ExcelDataReader

它可以将excel文件的输入流转换为
System.Data.DataSet
对象(可能使用BIFF规范进行解析)

以下是链接:

下面是一个代码示例:

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

//C#代码隐藏
受保护的无效按钮1\u单击(对象发送者,事件参数e){
//ExcelDataReader接受System.IO.Stream对象
var excelReader=新的ExcelDataReader(FileUpload1.FileContent);
FileUpload1.FileContent.Close();
数据集wb=excelReader.WorkbookData;
//获取工作簿的第一个工作表
DataTable dt=excelReader.WorkbookData.Tables[0];
GridView1.DataSource=dt.AsDataView();
GridView1.DataBind();
}

不,这是不可能的。客户已经定义了一个电子表格,我必须使用.XLS/BIFF格式,虽然似乎可以从内存中加载,但不能加载到某个给定的Excel实例中,只能为用户运行新的应用程序。它是通过将其加载到ISTorage中,然后使用OleLoad,然后使用IOleObject.DOVERB实现的,因为API不会导出ExcelDataReader。似乎这已经过时了。@MatthewJamesDavis只使用了
ExcelReaderFactory