EPPlus助力:优雅实现Excel数据到数据库的自动迁移之旅

这里我使用了Access数据库为例,导入EPPlus如果不会请看上一篇帖子

1.首先先设置EPPlus为非商业使用

cs 复制代码
  public Homes()
  {
      InitializeComponent();

      ExcelPackage.LicenseContext = OfficeOpenXml.LicenseContext.NonCommercial; // 设置EPPlus为非商业使用
  } 

2.Access数据库连接方法

cs 复制代码
 #region Access数据库连接
 public static DataSet Get(string sql)
 {
     OleDbConnection oleDb = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + @"\你的根目录下的库名;" + "Jet OLEDB:Database Password = 你的数据库密码");
     oleDb.Close();
     DataSet dataSet = new DataSet();
     DataTable datatable = new DataTable();
     oleDb.Open();
     OleDbDataAdapter dbDataAdapter = new OleDbDataAdapter(sql, oleDb);
     dbDataAdapter.Fill(datatable);
     dataSet.Tables.Add(datatable);
     oleDb.Close();
     return dataSet;
 }
 #endregion

3.导入方法

cs 复制代码
  public static DataTable ReadExcelFile(string filePath)
  {
      using (var package = new ExcelPackage(new FileInfo(filePath)))
      {
          ExcelWorksheet worksheet = package.Workbook.Worksheets[0];
          DataTable table = new DataTable();
          int columns = worksheet.Dimension.Columns;

          // 添加表格列
          for (int col = 1; col <= columns; col++)
          {
              table.Columns.Add(worksheet.Cells[1, col].Value.ToString());
          }

          // 添加数据行
          for (int row = 2; row <= worksheet.Dimension.Rows; row++)
          {
              DataRow dataRow = table.NewRow();
              for (int col = 1; col <= columns; col++)
              {
                  dataRow[col - 1] = worksheet.Cells[row, col].Value;
              }
              table.Rows.Add(dataRow);
          }
          return table;
      }
  }

4.使用导入方法到导入到数据库

cs 复制代码
  private void button3_Click(object sender, EventArgs e)
  {
      try
      {
          OpenFileDialog openFileDialog = new OpenFileDialog();
          openFileDialog.Filter = "Excel 文件 (*.xlsx)|*.xlsx|所有文件 (*.*)|*.*";
          openFileDialog.Title = "选择 Excel 文件";
          if (openFileDialog.ShowDialog() == DialogResult.OK)
          {
              string filePath = openFileDialog.FileName;
              // 构建 SQL 语句
              DataTable excelData = ReadExcelFile(filePath);
              foreach (DataRow row in excelData.Rows)
              {
                  //这里{row["姓名"]}是你单元格中对应的每一列的表头
                  Employee.Get($"INSERT INTO workers (Name,Age,Sex,Address,Salary,status) VALUES ('{row["姓名"]}',{row["年龄"]},'{row["性别"]}','{row["住址"]}','{row["薪资"].ToString().Replace("¥", "")}',0);");
              }
          }
          Flushed();//刷新数据
          NMessage("导入数据成功", NotificationType.Info);
      }
      catch (Exception ex)
      {
          NMessage("导入数据失败"+ex.Message, NotificationType.Error);
      }
  }
相关推荐
杜子不疼.7 分钟前
《Python学习之文件操作:从入门到精通》
数据库·python·学习
★YUI★10 分钟前
学习游戏制作记录(玩家掉落系统,删除物品功能和独特物品)8.17
java·学习·游戏·unity·c#
TDengine (老段)30 分钟前
TDengine IDMP 高级功能(4. 元素引用)
大数据·数据库·人工智能·物联网·数据分析·时序数据库·tdengine
谷宇.1 小时前
【Unity3D实例-功能-拔枪】角色拔枪(二)分割上身和下身
游戏·unity·c#·游戏程序·unity3d·游戏开发·游戏编程
DashVector1 小时前
如何通过Java SDK分组检索Doc
java·数据库·面试
LZQqqqqo1 小时前
C# 中 ArrayList动态数组、List<T>列表与 Dictionary<T Key, T Value>字典的深度对比
windows·c#·list
Olrookie1 小时前
XXL-JOB GLUE模式动态数据源实践:Spring AOP + MyBatis 解耦多库查询
java·数据库·spring boot
苏婳6661 小时前
【最新版】怎么下载mysqlclient并成功安装?
数据库·python·mysql
Tapdata3 小时前
《实时分析市场报告 2025》上线 | 从批处理到实时洞察,2025 年全球实时分析市场全景解读
数据库
海梨花3 小时前
【从零开始学习Redis】项目实战-黑马点评D2
java·数据库·redis·后端·缓存