首页 > 其他分享 >Excel导入数据

Excel导入数据

时间:2023-11-22 15:58:01浏览次数:38  
标签:account Excel await list 导入 file var new 数据

1.前端上传文件,

参考ElEmentUI 组件

 1             <el-upload
 2               class="upload-excel"
 3               accept=".xls, .xlsx"
 4               ref="uploadExcel"
 5               :multiple="false"
 6               :auto-upload="true"
 7               :limit="1"
 8               action=""
 9               :http-request="submitUpload"
10               :file-list="fileList"
11               :show-file-list="false"
12             >
13               <el-button
14                 size="small"
15                 type="primary" 
16                 class="el-icon-upload"
17                 plain
18               >导入</el-button>
19             </el-upload>
20 
21       // 上传文件excel
22       submitUpload(file) {
23         const formData = new FormData();
24         formData.append('file', file.file);
25         $axios.post("/api/import", formData,{headers: {'content-type':'multipart/form-data;'}})
26         .then(res => {
27           this.fileList = [];
28           if (res.data) {
29             this.$message.success('导入成功');
30             this.searchData();
31           }
32         });
33       },
View Code

2.后端接收文件,先读取Excel文件,然后处理数据,最后批量插入数据库,

 1 [HttpPost("import")]
 2 public async Task<bool> ImportAsync()
 3 {
 4     if (Request.Form.Files.Count == 0)
 5         throw new BusinessException(message: "请选择文件");
 6     if (Request.Form.Files.Count > 1)
 7         throw new BusinessException(message: "只能上传单个文件");
 8     var file = Request.Form.Files[0];
 9     return await _manager.ImportAsync(file);
10 }
11 
12 //读取文件,单独放扩展类ImportExtensions
13 
14 public static async Task<List<T>> ImportData<T>(IFormFile file, Func<ISheet, Task<List<T>>> ReadData)
15 {
16 
17     var extension = Path.GetExtension(file.FileName);
18 
19     IWorkbook workbook = null;
20     if (extension.Equals(".xlsx"))
21     {
22         workbook = new XSSFWorkbook(file.OpenReadStream());
23     }
24     else
25     {
26         workbook = new HSSFWorkbook(file.OpenReadStream());
27     }
28 
29     ISheet worksheet = workbook.GetSheetAt(0);
30 
31     // read data
32     var list = await ReadData(worksheet);
33 
34     return list;
35 }
36 
37 //manager里面代码
38 
39   public async Task<bool> ImportAsync(IFormFile file)
40   {
41       //读取文件
42       var list = await ImportExtensions.ImportData(file, ReadDataFromSheet);
43 
44       //去除已存在的
45       var accounts = list.Select(x => x.account);
46       var repectAccounts = (await _repository.GetListAsync(x => accounts .Contains(x.account)))
47           .Select(x => x.account);
48 
49       var distinctList = list.Where(x => !repectAccounts .Contains(x.account));
50 
51       //插入数据库
52       await _repository.InsertManyAsync(distinctList);
53 
54       return true;
55   }
56 
57  private async Task<List<Account>> ReadDataFromSheet(ISheet sheet)
58  {
59      var list = new List<Account>();
60      var i = 1;
61      while (sheet != null)
62      {
63          var row = sheet.GetRow(i);
64          if (row.Cells.Count == 0)
65          {
66              break;
67          }
68 
69          Account entity = new Account()
70          {
71              account= row.GetCell(0).StringCellValue.Trim(),
72              age= row.GetCell(1).NumericCellValue,
73          };
74 
75          list.Add(entity);
76          i++;
77      }
78 
79      return list;
80  }
C#

 

标签:account,Excel,await,list,导入,file,var,new,数据
From: https://www.cnblogs.com/xiangnile/p/17849199.html

相关文章

  • 数据库连接池数量设置多少合适
     结论连接池数量=((核心数*2)+有效磁盘数) 原因对于单核CPU的机器,顺序执行A和B永远比通过时间片切换“同时”执行A和B快;一旦线程的数量超过CPU核数,继续增加线程数,会导致线程上下文切换产生额外的开销;寻找数据库性能瓶颈的3个因素CPU......
  • 《计算机科学导论》课后习题 第4章 数据运算
    如果您的答案与我不同,并有个人的理解,欢迎在评论区讨论。一、复习题Q4-1算术运算和逻辑运算有什么区别?A:算数运算时运用于整数和浮点数的加、减、乘、除运算。逻辑运算应用于位模式中的一个二进制位,或者在两个模式中相应的两个二进制位的相同基本运算。Q4-2在二进制补码格式......
  • 数据库系列:RR和RC下,快照读的区别
    数据库系列:MySQL慢查询分析和性能优化数据库系列:MySQL索引优化总结(综合版)数据库系列:高并发下的数据字段变更数据库系列:覆盖索引和规避回表数据库系列:数据库高可用及无损扩容数据库系列:使用高区分度索引列提升性能数据库系列:前缀索引和索引长度的取舍数据库系列:MySQL引擎My......
  • Excel 操作
    数据验证数据->数据验证->输入验证条件......
  • MySQL数据类型
    数据类型1.MySQL中的数据类型类型类型举例整数类型TINYINT,SMALLINT,MEDIUMINT,INTBIGINT浮点类型FLOAT,DOUBLE定点数类型DECIMAL位类型BIT日期时间类型YEAR,TIME,DATE,DATETIME,TIMESTAMP文本字符串类型CHAR,VARCHAR,TI......
  • 聊聊分布式 SQL 数据库Doris(四)
    FE层的架构都能在网上找到说明.但BE层的架构模式、一致性保障、与FE层之间的请求逻辑,数据传输逻辑等,我个人暂时没有找到相应的博客说明这些的。当然这些是我个人在学习与使用Doris过程中,对内部交互逻辑与实现感兴趣才有这些疑问.还好现在有GPT这类大模型,有了疑问,只要问题描述得......
  • CAD文件导入到soildworks
    1、选定一个面           2、点击插入-dwf/dwg-选择图纸-确定 ......
  • [数据治理] 数据法规之《关于构建数据基础制度更好发挥数据要素作用的意见》("数据二十
    0法规基本信息发布时间2022-12-1921:49信息来源新华社1法规全文1.0法规名称:中共中央国务院|关于构建数据基础制度更好发挥数据要素作用的意见(2022年12月2日)数据作为新型生产要素,是数字化、网络化、智能化的基础,已快速融入生产、分配、流通、消费和社会服务管理等......
  • 基本数据类型
    一、python3基本数据类型(一)六大标准数据类型Number(数字)String(字符串)Bool(布尔值)List(列表)Sat(集合)Tuple(元组)Dictionary(字典)在六种标准类型中不可变数据(3个):Number(数字),String(字符串),Tuple(元组)可变元素(3个):List(列表),Sat(集合),Dictionary(字典)此外还......
  • C/C++ 使用API实现数据压缩与解压缩
    在Windows编程中,经常会遇到需要对数据进行压缩和解压缩的情况,数据压缩是一种常见的优化手段,能够减小数据的存储空间并提高传输效率。Windows提供了这些API函数,本文将深入探讨使用WindowsAPI进行数据压缩与解压缩的过程,主要使用ntdll.dll库中的相关函数。关键函数介绍RtlGetComp......