在前台先放一个FileUpload控件用来选择文件: <asp:FileUpload ID="fulImport" runat="server" Height="20px" Width="200px" /> 样式可以自己再编辑;再定义一个按钮用来导入 <asp:Button ID="btnImport" runat="server" Height="20px" Text="上传" OnClick="btnImport_Click" /> 后台: protected void btnImport_Click(object sender, EventArgs e) { //获取文件名 string strFileName = fulImport.FileName; //验证文件类型是不是Excel if (strFileName.Substring(strFileName.LastIndexOf('.')) != ".xlsx" && strFileName.Substring(strFileName.LastIndexOf('.')) != ".xls") { //提示错误信息..... } } /// <summary> /// 获取Excel数据 /// </summary> /// <param name="filePath">文件的路径</param> /// <returns></returns> private DataSet GetExcelData(string strFilePath) { try { //获取连接字符串 string strConn = GetOleDbConnectionString(strFilePath); DataSet ds = new DataSet(); using (OleDbConnection conn = new OleDbConnection(strConn)) { //打开连接 conn.Open(); System.Data.DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); // 取得Excel工作簿中所有工作表 System.Data.DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); OleDbDataAdapter sqlada = new OleDbDataAdapter(); foreach (DataRow dr in schemaTable.Rows) { try { string strSql = "Select * From [" + dr[2].ToString().Trim() + "]"; if (strSql.Contains("$")) { OleDbCommand objCmd = new OleDbCommand(strSql, conn); sqlada.SelectCommand = objCmd; sqlada.Fill(ds, dr[2].ToString().Trim()); } } catch { } } //关闭连接 conn.Close(); } return ds; } catch (Exception ex) { return null; } } /// <summary> /// 唯一需要注意的是,如果目标机器的操作系统,是64位的话。 /// 项目需要 编译为 x86,而不是简单的使用默认的 Any CPU. /// </summary> /// <param name="strExcelFileName"></param> /// <returns></returns> private string GetOleDbConnectionString(string strExcelFileName) { // Office 2007 以及 以下版本使用. string strJETConnString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'", strExcelFileName); // xlsx 扩展名 使用. string strASEConnXlsxString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;\"", strExcelFileName); // xls 扩展名 使用. string strACEConnXlsString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=YES\"", strExcelFileName); //其他 string strOtherConnXlsString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'", strExcelFileName); //尝试使用 ACE. 假如不发生错误的话,使用 ACE 驱动. try { System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection(strACEConnXlsString); cn.Open(); cn.Close(); // 使用 ACE return strACEConnXlsString; } catch (Exception) { // 启动 ACE 失败. } // 尝试使用 Jet. 假如不发生错误的话,使用 Jet 驱动. try { System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection(strJETConnString); cn.Open(); cn.Close(); // 使用 Jet return strJETConnString; } catch (Exception) { // 启动 Jet 失败. } // 尝试使用 Jet. 假如不发生错误的话,使用 Jet 驱动. try { System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection(strASEConnXlsxString); cn.Open(); cn.Close(); // 使用 Jet return strASEConnXlsxString; } catch (Exception) { // 启动 Jet 失败. } // 假如 ACE 与 JET 都失败了,默认使用 JET. return strOtherConnXlsString; }
首先 默认html的input type=file是不可能选择文件夹的.所以如果你要求选择文件夹 那么你只能采用第三方控件. 选择了文件夹之后,无非就是上传,第三方控件估计也有这个功能. 至于导入无非就是你上传了之后 读取xls 也请使用第三方控件(npoi)
7,540
社区成员
27,673
社区内容
加载中
试试用AI创作助手写篇文章吧