从上传的Excel文件中获取数据而不保存到文件系统

时间:2008-11-04 16:22:15

标签: 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: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 ...

}

任何人都可以帮我吗?我感谢任何人的考虑。

THX,
加布

6 个答案:

答案 0 :(得分:8)

我在Codeplex上找到了一个很棒的轻量级开源API,用于执行此操作,称为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();
}

答案 1 :(得分:3)

使用FileUpload1。FileContent Stream。我猜您的Excel库可以直接处理流。

答案 2 :(得分:1)

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

另外,您可以在[MS-XLS]: Excel Binary File Format (.xls) Structure Specification看到有关XLS文件格式的文档。

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

答案 3 :(得分:1)

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

http://www.csvreader.com

答案 4 :(得分:0)

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

查看此帖子:Write an excel workbook to a memory stream .NET

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

ExcelXMLWriter

您不需要在服务器上安装Excel(无论如何,当您通过网络访问时,这有点打破了MS许可)。

您可以使用Workbook.Load(stream)

将Excel工作簿加载为流

答案 5 :(得分:0)

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

祝你好运。