ASP.net 读取(导入)客户端Excel文档

实现的思路很清晰,先将文件上传到服务端的临时路径,再调用数据库或者Office接口读取和解析文档内容即可。

 

1.在页面上放置FileUpload控件,和一个“上传”按钮

<asp:FileUpload ID="FileUpload_Excel" runat="server" Font-Names="Calibri" Font-Size="Small" Height="18px" Width="170px" />

<asp:Button ID="Button_Upload" runat="server" CssClass="ButtonCss" Height="20px" OnClick="Button_Upload_Click" TabIndex="1" Text="Upload" Width="60px" />

2.在Button_Upload的单击事件响应函数中执行FileUpload的上传方法:

            if (FileUpload_Excel.HasFile)
            {
                if ((System.IO.Path.GetExtension(FileUpload_Excel.FileName)).ToLower().StartsWith(".xls"))//检测扩展名
                {
                    try
                    {
                        String path_temp = "........"; //要保存的临时路径
                        FileUpload_Excel.SaveAs(path_temp); //FileUpload的SaveAs方法实现上传
                        Label_Msg.Text = "Saved !";
                        //......读取文档
                    }
                    catch (Exception ex) { Label_Msg.Text = ex.Message; }
                }
                else Label_Msg.Text = "Only ECXEL-format doc. accepted!";
            }
            else Label_Msg.Text = "No file selected!.";

3.读取/解析Excel文档。至少有两种方法,一种是使用Microsoft.Office.Interop.Excel中提供的方法,另一种是System.Data.OleDb数据库接口。前一种方法的优点是可以读取Excel的一些高级属性,比如字体、颜色、有效性规则等;而后已中的优点是速度很快。本例中笔者只需要读取Excel中的表格数据,对其他高级属性不感兴趣,故采用第二种方法。

该方法的封装函数如下:

            public DataSet ExcelToSet(String Path_Im ,bool Delete)
            {
                try
                {
                    DataSet SheetSet = new DataSet();
                    //通过OleDb连接到Excel
                    String conString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Path_Im + ";Extended Properties=\"Excel 12.0;HDR=YES\"";
                    System.Data.OleDb.OleDbConnection DbConn = new System.Data.OleDb.OleDbConnection(conString);
                    DbConn.Open();
                    if (DbConn.State == ConnectionState.Open)
                    {
                    //获取Sheet列表
                        System.Data.DataTable Schema_dt = DbConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
                        if (Schema_dt != null)
                        {
                            foreach (DataRow dr in Schema_dt.Rows)//遍历所有Sheet
                            {
                                String SheetName = dr["TABLE_NAME"].ToString();//获取Sheet名称
                                DataTable Dt_Sheet = new System.Data.OleDb.OleDbDataAdapter(
                                    String.Format("select * from [{0}]", SheetName), DbConn)
//填充Sheet数据到DataTable
                                //获取的Sheet名称是带后缀的,需要处理一下
                                SheetName = SheetName.TrimStart("'".ToCharArray());
                                SheetName = SheetName.TrimEnd("'".ToCharArray());
                                SheetName = SheetName.TrimEnd("$".ToCharArray());
                                Dt_Sheet.Name = SheetName;
                                //添加该Sheet(作为一个DataTable)的数据到DataSet
                                try { SheetSet.Tables.Add(Dt_Sheet); }
                                catch { }
                            }
                        }
                        else
                            SheetSet = null;
                        DbConn.Close();
                    }
                    else
                        SheetSet = null;
                    //删除临时文档
                    if (Delete && File.Exists(Path_Im))
                        File.Delete(Path_Im);
                    return SheetSet;
                }
                catch
                {
                }
                return null;
            }

这样,Excel中的数据就装填到DataSet中了,DataSet中的一个DataTable就对应了Excel中的一个Sheet。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值