.net选择文件批量导入EXCEl

wt_94713 2016-11-14 05:40:07
要做一个功能选择文件夹,其中包含多个EXCEL,然后导入各个EXCEL中的数据。
...全文
1625 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
铁马_ 2019-10-12
  • 打赏
  • 举报
回复
引用 7 楼 铁马_ 的回复:
在前台先放一个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; }
有部分忘记写了 btnImport_Click方法里面验证好文件类型是Excel后,获取到文件的路径,再调用GetExcelData方法将Execl内容转换成DataSet,。最后对DataSet内的数据做操作.....
铁马_ 2019-10-12
  • 打赏
  • 举报
回复
在前台先放一个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; }
LWHLOVECD 2018-02-01
  • 打赏
  • 举报
回复
我用C#做了一个。不过好像格式统一要
lwqwag 2016-12-23
  • 打赏
  • 举报
回复
引用 2 楼 diaodiaop 的回复:
首先 默认html的input type=file是不可能选择文件夹的.所以如果你要求选择文件夹 那么你只能采用第三方控件. 选择了文件夹之后,无非就是上传,第三方控件估计也有这个功能. 至于导入无非就是你上传了之后 读取xls 也请使用第三方控件(npoi)
请问C++如何使用npoi的库啊
by_封爱 2016-11-25
  • 打赏
  • 举报
回复
首先 默认html的input type=file是不可能选择文件夹的.所以如果你要求选择文件夹 那么你只能采用第三方控件. 选择了文件夹之后,无非就是上传,第三方控件估计也有这个功能. 至于导入无非就是你上传了之后 读取xls 也请使用第三方控件(npoi)
哈特比尔波 2016-11-25
  • 打赏
  • 举报
回复
请详细描述您的需求,我也来看看。

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧