.net上传excel表格并解析数据绑定到Gridview
前台:
<tr> <td class="td_control" style="padding-left:10px;"> <asp:FileUpload ID="FileUpload1" runat="server" Height="20px" /> <asp:Button ID="Upload" runat="server" Text="点击导入信息" OnClick="Upload_Click" Width="100px" Height="20px" /> </td> </tr>
后台:
//读取excel表格-Upload_Click方法要调用 private DataTable createDataSource(string strPath) { //HDR=Yes代表第一行是标题,不是数据 string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=" + strPath + ";Extended Properties=Excel 8.0;HDR=Yes;"; OleDbConnection con = new OleDbConnection(strCon); OleDbDataAdapter da = new OleDbDataAdapter("select * from [Sheet1$]", con); DataTable dt = new DataTable(); da.Fill(dt); return dt; } //将excel数据绑定到页面中 protected void Upload_Click(object sender, EventArgs e) { //检查文件是否存在 if (FileUpload1.HasFile == false)//HasFile用来检查FileUpload是否有指定文件 { Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('请您选择Excel文件!');</script>"); return;//当无文件时,返回 } string filename = FileUpload1.FileName; //获取Execle文件名 DateTime日期函数 string savePath = Server.MapPath(("~/Doc/") + filename); //Server.MapPath 获得虚拟服务器相对路径 FileUpload1.SaveAs(savePath); //SaveAs将上传的文件内容保存在服务器上 //绑定数据 DataTable dt = createDataSource(savePath); gvBill.DataSource = dt; gvBill.DataBind(); }
注意:
这种方式仅支持低版本.xls格式,如果需要支持.xls和.xlsx请先在服务器中安装支持的书记访问组件(适用于office2010的Microsoft Access Database Engine 2010 Redistributable);
下载地址:https://www.microsoft.com/zh-CN/download/details.aspx?id=13255
因为是web项目,所以要下载x86版本的,发布选anycpu,然后设置应用程序池32位兼容;
然后要将后台代码中变量strCon改为:
string strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strPath + "; Extended Properties=\"Excel 12.0;HDR=Yes\"";
刚刚我们定义访问版本中HDR设为了Yes,第一行会成为标题;然后对Gridview绑定数据的时候可能会遇到麻烦;
所以需要修改DataTable的表头信息:
dt.Columns[0].ColumnName = "declaration_Date"; dt.Columns[1].ColumnName = "project_Number"; dt.Columns[2].ColumnName = "project_Name"; dt.Columns[3].ColumnName = "trade_Mode"; dt.Columns[4].ColumnName = "agent_Name";
要在绑定数据前将DataTable的列名修改。