首页 > 其他分享 >.Net Code Excel 文件导入

.Net Code Excel 文件导入

时间:2024-02-22 20:13:20浏览次数:28  
标签:xlsx Code wb Excel exeFile ms new Net

第一步 下载NuGet NPOI包

    /// <summary>
    /// 将excel文教导入到订单表
    /// </summary>
    /// <param name="file">excel文件</param>
    /// <returns>: -1 ;返回导入文件格式不正确</returns>
    [HttpPost]
    public IActionResult UpdloadOrder(IFormFile file)
    {

        try
        {



            //一、验证文件格式(.xlsx/ .xls)
            string exeFile = Path.GetExtension(file.FileName);  //获取文件名后缀
            if (exeFile != ".xlsx" && exeFile != ".xls")
            {
                return Ok(-1);
            }
            //二、将excel订单信息转为List<订单>
            //(1)将excel文件转为工作(文件->内存流->工作薄)
            IWorkbook wb = null; //工作薄
            using (MemoryStream ms = new MemoryStream())
            {
                file.CopyTo(ms);  //文件·-> 内存流
                ms.Position = 0;

                //xls是2003版Office Microsoft Office Excel 工作表的格式
                //xlsx是2007版Office Microsoft Office Excel 工作表的格式
                if (exeFile == ".xlsx")
                {
                    wb = new XSSFWorkbook(ms);
                }
                else
                {
                    wb = new HSSFWorkbook(ms);
                }


            }
            //(2)获取工作薄的第一页
            ISheet sheet = wb.GetSheetAt(0);

            //(3) 第一页的数据(行 单元格)
            int rowNum = sheet.LastRowNum; //最后一行的行号 行号是从1开始0

            //(4)创建表的集合实例
            List<OrderInfo> orderInfos = new List<OrderInfo>();

            //(5)循环 数据  将每条数据添加到List<订单>
            for (int i = 1; i <= rowNum; i++) 
            {
                OrderInfo curOrder = new OrderInfo();  //实例化表 根据自己要导入的表
                IRow curRow = sheet.GetRow(i); //当前行
                curOrder.ONumber = YitIdHelper.NextId().ToString();  //订单编号 雪花编号
                curOrder.OName = curRow.GetCell(0).StringCellValue;  //字符串
                curOrder.OPhone = curRow.GetCell(1).StringCellValue;
                curOrder.Address = curRow.GetCell(2).StringCellValue;
                curOrder.Freight = (decimal)curRow.GetCell(3).NumericCellValue;//double数字

                curOrder.OrderForm = curRow.GetCell(4).NumericCellValue == 1;  //布尔类型
                curOrder.TotalCount = (int)curRow.GetCell(5).NumericCellValue;  //int 类型
                curOrder.TotalMoney = (decimal)curRow.GetCell(6).NumericCellValue; //double数字
                curOrder.PayType = (PayType)curRow.GetCell(7).NumericCellValue;  //枚举
                curOrder.OrderStatus = (OrderStatus)curRow.GetCell(8).NumericCellValue;//枚举


                orderInfos.Add(curOrder);    //将当前实例对象添加到集合
            }

            //三、将List<订单>写到数据表中


            //后台订单添加集合的方法
            int res = bll.ListToOrder(orderInfos);

            
            return Ok(res);
        }
        catch (Exception exp)
        {

            //写入日志
            logger.LogError("关闭订单错误错误" + exp.Message);
            throw;
        }

    }

标签:xlsx,Code,wb,Excel,exeFile,ms,new,Net
From: https://www.cnblogs.com/bdszr/p/18028059

相关文章

  • Codeforces 869D The Overdosing Ubiquity
    考虑树的\(\text{dfs}\)(根据当前节点\(u\)找到\(v\)满足存在\((u,v)\),然后走向\(v\)进入更深的搜索)为和能做到\(O(n)\)的复杂度。原因是没有环的情况,到每个点只有一条路径。回到这个题,有\(m\)条边导致到每个点可能有多条路径了。能发现其实还是能\(\text{dfs}\)......
  • 代码随想录算法训练营day02 | leetcode 977. 有序数组的平方、35.搜索插入位置、34.在
    题目链接:977.有序数组的平方-简单题目描述:给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16,1,0,9,100]排序后,数组变为[0,1,9,16,100]......
  • EfficientNet环境搭建&网络修改
    引子在深度学习CV领域,最初2012年突破的就是图像分类,发展这么多年,基本上已经没有什么进展了。此篇作为之前EfficientNet挽留过的总结,现在整理下,OK,让我们开始吧。一、EfficientNet安装1、pytorch版本网址:https://github.com/lukemelas/EfficientNet-PyTorch2、pipinstalleffic......
  • .netCore之Automapper映射封装
    1.Automapper解说Automapper是一个对象与对象的关系映射库,目的就是帮助你实现源类型到目标类型的对象之间的映射2.Automapper的封装A.中间件中添加注册点击查看代码//Automapper映射builder.Services.AddAutoMapper(typeof(AutoMapperConfigs));B.添加特性公共类获取......
  • Codeforces 1876F - Indefinite Clownfish
    首先注意到这样一个性质:既然两个序列的平均值相同,并且又形成公差\(\pm1\)的等差数列,就必然会存在一个元素\(x\)满足\(x\)在两个序列中都出现过(否则两个序列的值域区间不交,值域区间靠后的那个显然平均值比靠前的那个大)。那么我们枚举\(x\)在两个序列中出现的位置\(p\)和......
  • Codeforces Round 923 (Div. 3)
    A.MakeitWhite#include<bits/stdc++.h>usingnamespacestd;usingi32=int32_t;usingi64=longlong;usingi128=__int128;usingldb=longdouble;#defineinti64usingvi=vector<int>;usingpii=pair<int,int>;usingvii......
  • <kubernetes_sd_config>
    -source_labels:[__meta_kubernetes_service_annotation_prometheus_io_path]action:replacetarget_label:__metrics_path__regex:(.+) 您提供的配置片段是一个Prometheus的relabeling规则。Prometheus使用relabeling来动态地修改......
  • vscode配置cpplint
    cpplint是Google开发的一个用于检查C++代码风格的工具。它可以自动扫描C++源代码,并提供有关代码规范、风格和错误的反馈。cpplint基于Google的C++编码规范,但也可以配置为符合其他的代码风格指南。注意,cpplint不依赖于vscode存在,可以单独在命令行中使用。安装cpplint:pipinsta......
  • Python处理Word,Excel,PDF
    openpyxl模块处理Excel表安装以下命令意思是:指定D盘下的Python解释器用豆瓣的源安装openpyxl模块D:\PycharmProjects\Study\venv\Scripts\python.exe-mpipinstallopenpyxl-ihttp://pypi.douban.com/simple--trusted-host=pypi.douban.com基本概念openpyxl库有三大模......
  • Leetcode刷题第十二天-动态规划
    1049:最后一块石头的重量II链接:1049.最后一块石头的重量II-力扣(LeetCode)1classSolution:2deflastStoneWeightII(self,stones:List[int])->int:3#dp[i]背包为i的最大价值为dp[i]4#推导公式dp[i]=max(dp[i],dp[i-stones[i]]+stones[i]......