首页 > 编程语言 >C# 之NPOI 操作Excel

C# 之NPOI 操作Excel

时间:2024-12-30 17:12:06浏览次数:1  
标签:C# Excel NPOI cell file new var using

NuGet 安装 NPOI

命名空间

using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;  // 对于 .xlsx 格式
using NPOI.HSSF.UserModel;
using Model.Common;  // 对于 .xls 格式

添加相关方法

[HttpPost]
public IActionResult Upload(IFormFile file)
{
    ApiResult backMgs = new ApiResult();

    if (file == null || file.Length == 0)
    {
        return Content("请选择一个文件上传。");
    }



    //获取文件路径
    var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "uploads", file.FileName);
    //获取文件后缀名
    string sExt = Path.GetExtension(filePath).ToLower();

    // 确保上传的文件夹存在  
    var fileInfo = new FileInfo(filePath);
    fileInfo.Directory.Create();

    // 保存文件  
    using (var stream = new FileStream(filePath, FileMode.Create))
    {
        file.CopyTo(stream);
    }

    //成功数据列表
    var tList = new List<stuList>();
    //失败数据列表
    var eList = new List<stuList>();


    using (var stream = file.OpenReadStream())
    {

        //根据文件流创建excel数据结构
        IWorkbook workbook = null;
        //区分文件类型
        if (sExt == ".xlsx")
        {
            workbook = new XSSFWorkbook(stream); // .XLSX格式
        }
        else if (sExt == ".xls")
        {
            workbook = new HSSFWorkbook(stream); // .XLS格式
        }

        // 获取第一个Sheet页
        ISheet sheet = workbook.GetSheetAt(0);

        //获取每行数据
        //foreach (IRow row in sheet)
        //{
        //    //循环每行数据
        //    foreach (ICell cell in row)
        //    {
        //        var _cell = cell.ToString();
        //    }
        //    Console.WriteLine();
        //}


        // 读取表头
        IRow headerRow = sheet.GetRow(0);
        for (int i = 0; i < headerRow.LastCellNum; i++)
        {
            ICell cell = headerRow.GetCell(i);
        }

        //获取所有数据
        var allStu = _stuList.AllStuList();

        //循环一共多少行
        for (int i = 1; i <= sheet.LastRowNum; i++)
        {
            //解析每一行数据
            var currentRow = sheet.GetRow(i);
            if (currentRow != null)
            {
                List<string> list = new List<string>();
                //每行多少列
                for (int cell = 0; cell <= currentRow.LastCellNum; cell++)
                {
                    if (null == cell) continue;


                    var data = currentRow.GetCell(cell)?.ToString();
                    list.Add(data);

                }
                //避免id重复,使用时间戳
                //DateTimeOffset now = DateTimeOffset.UtcNow;
                //long timestamp = now.ToUnixTimeSeconds();


                var stuList = new stuList();
                //stuList.id = Convert.ToInt32(timestamp) + i;
                stuList.number = Convert.ToInt32(list[0]);
                stuList.stuName = list[1]?.ToString();
                stuList.stuGrade = list[2]?.ToString();
                stuList.createTime = DateTime.Now;
                stuList.school = list[3]?.ToString();
                stuList.ranking = list[4]?.ToString();
                stuList.sysNumber = Utility.uniqueNumber();

                //数据库中,有相同编号的不添加
                var _id = allStu.Where(a => a.number == Convert.ToInt32(list[0])).FirstOrDefault();
                //当前传入的列表中,有相同的编号,也不添加
                var curId = tList.Where(a => a.number == Convert.ToInt32(list[0])).FirstOrDefault();

                if (_id != null || curId != null)
                {
                    eList.Add(stuList);
                }
                else
                {
                    tList.Add(stuList);
                }


            }
        }

        _stuList.AddStuList(tList);
    }

    var _json = eList.Select(a =>
    {
        return new
        {
            a.number,
            a.stuName,
            a.stuGrade,
            createTime = Utility.FormatCreateTime(a.createTime),
            a.school,
            a.ranking
        };
    });
    backMgs.Code = 0;
    backMgs.Data = _json;
    backMgs.Msg = $"上传成功,一共{tList.Count}条,失败条数{eList.Count}";

    return Ok(backMgs);
}

标签:C#,Excel,NPOI,cell,file,new,var,using
From: https://www.cnblogs.com/tlf01/p/18641717

相关文章

  • ettercap安装抓包
    1、开启中间机器的转发功能不然目标机器会断网echo1>/proc/sys/net/ipv4/ip_forward2、查看网关iproute|grepdefault 3、安装arpspoofaptinstalldsniffarpspoof-i<interface>-t<target_ip>-r<gateway_ip>这样目标的所有流量就经过了中间攻击机器4、......
  • 云原生周刊:Docker 的替代方案
    开源项目推荐DitoDito是一个用Go语言编写的高级Layer7反向代理服务器,提供灵活的中间件支持、后端连接的自定义证书处理、动态配置重载,以及与Redis的分布式缓存和速率限制功能。其主要特性包括高效处理HTTP和HTTPS请求、支持WebSocket代理、动态配置热重载、分布式......
  • 超低功耗段LCD液晶段码显示屏驱动芯片(ic)VKL128 LQFP44 I2C通信接口/可配置4种功耗模
    产品品牌:永嘉微电/VINKA产品型号:VKL128封装形式:SSOP44概述VKL128是一个点阵式存储映射的LCD驱动器,可支持最大128点(32SEGx4COM)的LCD屏。单片机可通过I2C接口配置显示参数和读写显示数据,可配置4种功耗模式,也可通过关显示和关振荡器进入省电模式。其高抗干扰,低功耗的特性适用于......
  • 一个最简单的ios程序(object_c)的编写
    前言      如何在苹果系统MacOS创建一个简单的ios(iphone)程序,貌似非常的简单。但是,作为习惯了Windows开发的程序员来说,有时候还觉得有点麻烦,至少开始有点很不习惯。    本博文试着把这个过程展现一下,供大家参考。   开发硬件平台是MacBookAir2022版,苹果......
  • cursor-vip:免费试用cursor Pro的神器
    cursor-vip是一个为cursor代码编辑器提供的VIP账号工具,只要下载软件,无需登录即可享用Pro账号带来的高级体验,下面是使用方法:一、安装cursor软件    直接在官网下载即可:Cursor-TheAICodeEditor二、安装cursor-vip工具       在MacOS/Linux中,请......
  • 团队管理必备:RACI责任矩阵让分工更高效
    在团队合作中,最怕的就是责任不清、任务分工混乱。谁该做什么,谁对结果负责,谁需要提供帮助,谁需要被通知?如果这些问题没有理清楚,就很容易出现任务没完成、团队内耗或者“甩锅”的情况。RACI责任矩阵正是为了解决这些问题的神器。什么是RACI矩阵?RACI矩阵可以简单理解为一个“责任分......
  • 私有化部署视频平台EasyCVR安防小知识:如何评估一个监控系统的抗干扰性能?
    在当今复杂多变的监控环境中,确保监控系统的稳定性和可靠性至关重要。抗干扰性能作为衡量监控系统性能的关键指标之一,直接关系到监控图像的清晰度、数据的完整性以及系统的响应速度。本文将详细介绍评估监控系统抗干扰性能的多个关键方面,以及如何通过这些评估来优化系统性能。通过......
  • Docker之Swarm集群管理
    Swarm简介1、Swarm是一个集群化任务编排工具,使用声明式的配置,配置文件接近docker-compose2、Swarm是Docker引擎内置(原生)的集群管理和编排工具,DockerSwarm是Docker官方三剑客项目之一(但现在用的不是特别多了)Dockerswarm的特点:1、集群化任务编排工具2、声明式配置方式......
  • WPF VisualStateManager VisualStateGroups VisualState ColorAnimation
    <Windowx:Class="WpfApp120.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft......
  • WebSocket 心得分享 转载
    一、前言❝本文将介绍WebSocket的封装,比如:心跳机制,重连和一些问题如何去处理❞二、背景之前,钱包相关的查询,我们是使用的轮询方案来做的,后来更新了一次需求,需要做一些实时数据统计的更新,然后顺带给钱包的余额也用长连接来做了,好,那么故事就开始了...某天,「老板:」 我钱怎么......