【问题标题】:Reading a spreadsheetl file from fileupload control into filestream将电子表格文件从文件上传控件读取到文件流中
【发布时间】:2012-09-14 19:10:09
【问题描述】:

我正在尝试找到使用文件上传控件选择 Excel 电子表格(xls 和 xlsx)的最佳方法,然后使用文件流对象对其进行解析,然后填充数据集。

到目前为止,这是我完成这项工作的代码,但不同之处在于我将 excel 电子表格保存到我的解决方案中的文件夹中,然后使用 Microsoft ACE OLEDB 连接查询数据。

protected void btnUpload_Click(object sender, EventArgs e)
    {
        string connectingString = "";
        if (ctrlFileUpload.HasFile)
        {
            string fileName =
                Path.GetFileName(ctrlFileUpload.PostedFile.FileName);

            string fileExtension =
                Path.GetExtension(ctrlFileUpload.PostedFile.FileName);
                //Path.GetExtension(ctrlFileUpload.PostedFile.ContentType);

            string fileLocation =
                Server.MapPath("~/App_Data/" + fileName);
            ctrlFileUpload.SaveAs(fileLocation);

            // Check whether file extension is xls or xslx
            if (fileExtension == ".xls")
            {
                connectingString =
                    "Provider=Microsoft.ACE.OLEDB.4.0;Data Source=" +
                    fileLocation + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=2\"";
            }

            else if (fileExtension == ".xlsx")
            {
                connectingString =
                    "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
                    fileLocation + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=2\"";
            }

            // Create OleDb Connection and OleD Command
            using (OleDbConnection con = new OleDbConnection(connectingString))
            {
                try
                {
                    OleDbCommand cmd = new OleDbCommand();
                    cmd.CommandType = CommandType.Text;
                    cmd.Connection = con;
                    OleDbDataAdapter dAdapter = new OleDbDataAdapter(cmd);
                    //DataTable dtExcelRecords = new DataTable();
                    DataSet ds = new DataSet();
                    con.Open();
                    DataTable dtExcelSheetName = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

                    string getExcelSheetName = dtExcelSheetName.Rows[0]["Table_Name"].ToString();
                    cmd.CommandText = "Select * FROM [" + getExcelSheetName + "]";
                    dAdapter.SelectCommand = cmd;
                    //dAdapter.Fill(dtExcelRecords);
                    dAdapter.Fill(ds);
                    //GridView1.DataSource = dtExcelRecords;
                    //GridView1.DataBind();
                }
                catch (Exception ex)
                {

                }
            }

        }
    }

总结一下,我想读取电子表格中的数据,然后将其绑定到数据集,但不将文件保存到物理路径。

是否有一种更简洁的方式来编写我缺少的这段代码。谢谢!!

【问题讨论】:

  • 钱德拉是你的同事之一吗? stackoverflow.com/q/12420310/284240
  • 大声笑不,他不是,但我会看看那个链接。谢谢!
  • 有没有不用下载自定义类库就可以使用的解决方案?

标签: c# asp.net file-upload filestream


【解决方案1】:

我认为如果不将文件保存到您的服务器就无法获取数据

如果您无法保存上传的文件,如何将Data Source 提供给您的 oleDbConnection 字符串??

如果您不想保留文件,可以在完成此执行后删除文件。

你也可以这样参考https://stackoverflow.com/a/12420416/284240

【讨论】:

  • 这是我向经理提出的建议,但他认为使用 filestream 读取文件会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多