C#中Excel数据导入
来源:互联网 发布:哈尔滨旅游 知乎 编辑:程序博客网 时间:2024/05/23 13:29
C#中Excel数据导入
本文记录我在开发中用到的关于excel文件导入问题,记录分享出来方便后续使用。
代码块
读取导入的excel文件 并保存到数据库中
/// <summary> /// 文件读取 /// </summary> public void FileUpload() { string result = "导入成功!"; string webPath = "/_data/"; string dir = HttpContext.Current.Server.MapPath("~" + webPath); if (!System.IO.Directory.Exists(dir)) { Directory.CreateDirectory(dir);//文件保存路径 } //获取导入文件源 HttpPostedFile file = HttpContext.Current.Request.Files["file"]; string real_filename = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "_" + file.FileName; string savePath = dir + real_filename; //保存导入的附件 file.SaveAs(savePath); string col = "guid,code,name,sex";//数据库中列 string[] column = col.Split(','); //导入数据到数据库 InsertTable(savePath, "0", column, ref result); } /// <summary> /// 导入数据到数据库 /// </summary> /// <param name="excelPath">excel文件访问路径</param> /// <param name="sheetName">sheet索引 默认为0</param> /// <param name="column">数据库中数据列</param> /// <param name="result">返回结果</param> public void InsertTable(string excelPath, string sheetName, string[] column, ref string result) { string msg = ""; try { //根据文件索引读取excel文件返回datatable数据 DataTable dt = ExcelData.GetExcelToDataTableBySheet(excelPath, sheetName); //循环excel数据行 for (int i = 1; i < dt.Rows.Count; i++) { try { IInsertDataSourceFace insert = new InsertSQL("Student"); insert.DataBaseAlias = cConfig.Golden3C_AuthenticationCenter; for (int j = 0; j < column.Length; j++)//循环数据列 { if (column[j] == "guid") { //数据列单独使用情况 string guid = Guid.NewGuid().ToString(); insert.AddFieldValue("guid", guid); } else insert.AddFieldValue(column[j], dt.Rows[i][j]); } insert.ExecuteNonQuery(); } catch (Exception ex) { msg += dt.Rows[i]["F1"].ToString() + "导入失败!/n"; ExceptionManage.ExceptionHandle(ex); } } } catch (Exception ex) { msg += "excel文件读取失败!"; ExceptionManage.ExceptionHandle(ex); } } /// <summary> /// 读取excel文件内容返回datatable /// </summary> /// <param name="FileFullPath">文件路径</param> /// <param name="SheetName">sheet名称</param> /// <returns></returns> public static DataTable GetExcelToDataTableBySheet(string FileFullPath, string SheetName) { DataSet ds = new DataSet(); int sheetIndex = int.Parse(SheetName); System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(); try { string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + FileFullPath + ";Extended Properties='Excel 12.0; HDR=NO; IMEX=1'"; //此连接可以操作.xls与.xlsx文件 conn = new System.Data.OleDb.OleDbConnection(strConn); conn.Open(); DataTable dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); string[] strTableNames = new string[dtSheetName.Rows.Count]; for (int k = 0; k < dtSheetName.Rows.Count; k++) { if (k == sheetIndex)//判断 如果sheet的索引与传入值的索引一致 则导入 { //获取sheet的名称 strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString(); string sheetName = ""; int i = strTableNames[k].IndexOf('$'); if (strTableNames[k].StartsWith("'")) { sheetName = strTableNames[k].Substring(1, i - 1); } else { sheetName = strTableNames[k].Substring(0, i); } string sql = string.Format("SELECT * FROM [{0}$]", sheetName); System.Data.OleDb.OleDbDataAdapter odda = new System.Data.OleDb.OleDbDataAdapter(sql, conn); odda.Fill(ds, SheetName); break; } else { //Log.WriteLog("系统默认每个table中单个sheet表导入,请确保所导入的sheet表的索引为0"); } } } catch (Exception ex) { ExceptionManage.ExceptionHandle(ex); } finally { conn.Close(); } return ds.Tables[0]; }
备注:
excel文档数据格式为:
文章中代码读取后的数据格式为:
欢迎同仁批评指正。
阅读全文
0 0
- C#中Excel数据导入
- C# excel数据导入
- C#导入Excel数据
- C#中EXCEL导入
- C#导入Excel表数据
- c#将datagridview中的数据导入到Excel中(winForm)
- C# 从Excel表中导入数据函数到DataSet
- C#将数据从datagridView中导入到Excel
- C# web 将Excel表中数据导入SQL数据库
- C#实现将DataGridView中的数据导入到Excel中
- C#将List中的数据导入Excel文件中
- C#将数据导入到excel表格中
- C#将SQL数据库中数据导入Excel中,并将Excel中反导入SQL数据库中
- C#将SQL数据库中数据导入Excel中,并将Excel中反导入SQL数据库中
- C#将SQL数据库中数据导入Excel中,并将Excel中反导入SQL数据库中
- C#将SQL数据库中数据导入Excel中,并将Excel中反导入SQL数据库中
- Excel数据导入DataGrid中
- sql数据导入excel中。
- Android Handler循环定时器
- 我的linux命令手册
- mysql:Unknown column 'å°�hong' in 'field list'
- 数据库-面试题(持续更新)
- 读取Android 源码
- C#中Excel数据导入
- 微信公众平台开发(PHP)(五) 天气预报功能开发
- 六边形 网格
- ASP.NET Web api 身份认证原理解析
- Vue使用具名插槽细节
- 通过Jenkins构建maven项目的Docker镜像
- Android基础知识(十)之多媒体
- 视频时序标准
- 阻塞非阻塞与同步异步区别 发表于 2015-04-18 | 分类于 网络编程 | 在网络编程中,经常会提到同步/异步,阻塞/非阻塞的概念,记得一开始的时候我总是分不清它们之间有什么区别