首页 > 其他分享 >Dotnet6 NPOI操作Excel基本操作总结

Dotnet6 NPOI操作Excel基本操作总结

时间:2023-09-04 15:23:17浏览次数:45  
标签:sheet string sheetName Dotnet6 Excel var path workbook 基本操作

背景

  • 需要对Excel进行读取和写入,目前使用Dotnet6开发环境,故直接使用。
  • 达到的效果:兼容.xls.xlsx,识别行为空自动跳过,识别显示值,识别格式内容

步骤

  • Dotnet 6Nuget 安装 NPOI, 具体版本 2.6.1,tips: 搜索资料时,可能NPOI 1 与 NPOI 2 可能有出入。

使用方法

  • 获取相应文档对象
public static IWorkbook OpenWorkbook(string path)
        {
            using (var stream = File.OpenRead(path))
            {
                if (Path.GetExtension(path) == ".xls")
                    return new HSSFWorkbook(stream);
                else
                    return new XSSFWorkbook(stream);
            }
        }
  • 根据序号获取相应sheet对象,并复制该sheet,添加到原Excel第一个
public static void MoveAndCopySheet(string path, int index = 0)
        {
            var workbook = OpenWorkbook(path);
            var sheet = workbook.GetSheetAt(index);

            if (sheet == null)
                throw new Exception($"Sheet 'At {index}' not found.");
            
            var clonedSheet = workbook.CloneSheet(0);
            var cloneSheetName =  $"{sheet.SheetName}_copy_{DateTime.Now.ToShortTimeString().Replace(":","-")}";

            workbook.SetSheetName(workbook.GetSheetIndex(clonedSheet), cloneSheetName);

            workbook.SetSheetOrder(cloneSheetName, 0);

            using (var stream = File.OpenWrite(path))
            {
                workbook.Write(stream);
            }
        }
  • 根据sheet名称,复制,并移动到第一个
public static void MoveAndCopySheet(string path, string sheetName)
        {
            var workbook = OpenWorkbook(path);
            var sheet = workbook.GetSheet(sheetName);

            if (sheet == null)
                throw new Exception($"Sheet '{sheetName}' not found.");

            workbook.SetSheetOrder(sheetName, 0);
            var clonedSheet = workbook.CloneSheet(0);
            workbook.SetSheetName(workbook.GetSheetIndex(clonedSheet), sheetName + "_copy");

            using (var stream = File.OpenWrite(path))
            {
                workbook.Write(stream);
            }
        }
  • 循环行,判断对应单元格内容类型
 public static void ProcessRows(string path, string sheetName)
        {
            var workbook = OpenWorkbook(path);
            var sheet = workbook.GetSheet(sheetName);

            if (sheet == null)
                throw new Exception($"Sheet '{sheetName}' not found.");

            for (int rowIndex = 0; rowIndex <= sheet.LastRowNum; rowIndex++)
            {
                var row = sheet.GetRow(rowIndex);
                if (row == null) continue;

                for (int cellIndex = 0; cellIndex < row.LastCellNum; cellIndex++)
                {
                    var cell = row.GetCell(cellIndex);
                    if (cell == null) continue;

                    var isMerged = sheet.GetMergedRegion(cell.RowIndex) != null;
                    var showValue = cell.ToString();
                    var isFormula = cell.CellType == CellType.Formula;
                    var format = isFormula ? cell.CellFormula : showValue;

                    //Console.WriteLine($"[{isMerged}, {showValue}, {isFormula ? format : showValue}]");
                }
            }
        }
  • 循环行,对单元格进行处理,赋值后重新写入
public static void AddAndMapColumn(string path, string sheetName, int columnIndex)
        {
            var workbook = OpenWorkbook(path);
            var sheet = workbook.GetSheet(sheetName);

            if (sheet == null)
                throw new Exception($"Sheet '{sheetName}' not found.");

            for (int rowIndex = 0; rowIndex <= sheet.LastRowNum; rowIndex++)
            {
                var row = sheet.GetRow(rowIndex);
                if (row == null) continue;

                var cell = row.GetCell(columnIndex, MissingCellPolicy.CREATE_NULL_AS_BLANK);
                var newCell = cell == null ? row.CreateCell(columnIndex + 1) : row.GetCell(columnIndex + 1, MissingCellPolicy.CREATE_NULL_AS_BLANK);

                if (cell != null && cell.CellType == CellType.Numeric)
                    newCell.SetCellValue(cell.NumericCellValue + 1);
                else if (cell != null && cell.CellType == CellType.String)
                    newCell.SetCellValue(cell.StringCellValue);
            }

            using (var stream = File.OpenWrite(path))
            {
                workbook.Write(stream);
            }
        }

最后

  • 使用语言大模型会很快得到答案,但结果需要自行判断验证,有些时候无法保证,只能继续“拼凑”可用代码,但相对已经很好用了。愿以后大模型越来越好用,国产的要跟上。

标签:sheet,string,sheetName,Dotnet6,Excel,var,path,workbook,基本操作
From: https://www.cnblogs.com/hijushen/p/17677126.html

相关文章

  • Excel多列数据转为一行数据
    wps中filter+index+row+column+iferror函数组合使用 一、函数组合    在日常办公中,经常会使用到wps处理数据,在处理数据中会使用一些函数,可以事半功倍大大提高工作效率。  wps经典函数组合:filter+index+row+column+iferror  filter函数:可以返回多条数据  index......
  • 数据库的基本操作
    1.数据库的操作1.打开数据库-uroot:root为账号-p123456:123456为密码-h127.0.0.1:为地址mysql-uroot-p123456-h127.0.0.12.退出数据库exit\qquit3.注释符#/***/--4.数据库的增删改查增:createdatabasemydata;删:dropdatabasemydata;改:alterdata......
  • 用Excel函数批量校验身份证
    在将员工信息批量上传至网站时,通常会出现员工的身份证输入错误而导致无法上传成功,出现这种情况可以用Excel函数校验身份证信息是否有错误。 身份证号码中的校验码是身份证号码的最后一位,计算方法如下:1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数......
  • # yyds干货盘点 # 盘点一个Pandas处理Excel数据的实战案例
    大家好,我是皮皮。一、前言前几天在Python最强王者群【小马哥】问了一个Python自动化办公处理的问题,一起来看看吧。三更睡五更起,阎王夸你好身体,粉丝凌晨2-3点在群里发问。各位大佬,我又有个excel程序问题来求助了,请看下方这个excel文档,里面写了两个备注,麻烦帮忙解决一下吧,谢谢下图......
  • python: excel 换行符(_x000D_)
     data4=dataframe1.loc[4:34]foridx,datavalueindata4.iterrows():#strnum=Common.Utils.Utils.getAnnualLeave(data)print("[{}]:{}".format(idx,datavalue))slist=datavalue.tolist()hbll=BLL.EmpLoyeeHo......
  • H1H1Wifi模块-ESP-01s使用的基本操作
    H1H1Wifi模块-ESP-01s蓝牙,ESP-01s,Zigbee,NB-Iot等通信模块都是基于AT指令的设计AT指令简介AT指令集是从终端设备(TerminalEquipment,TE)或数据终端设备(DataTerminalEquipment,DTE)向终端适配器(TerminalAdapter,TA)或数据电路终端设备(DataCircuitTerminalEquipment,DCE)发......
  • C# 导出Excel的6种简单方法实现
      更新时间:2019年09月04日10:11:10 作者:JohnsonManohar  C#导出Excel的6种简单方法:数据表导出到Excel,对象集合导出到Excel,数据库导出到Excel,微软网格控件导出到Excel,数组导出到Excel,CSV导出到Excel,你都会了吗?需要的朋友们下面随着小编来一起学习学习吧 ......
  • SAP LSMW日志信息如何导出到Excel里?
    SAPLSMW日志信息如何导出到Excel里?在SAP系统中,数据迁移LSMW运行的日志,是可以下载到本地Excel文件里的。方式如下所示:双击某个会话,点击打印机图标,就可以导出到Excel文件里了,输入文件名,指定文件保存的目录,-完-写于2023-8-25.......
  • Git使用教程-安装、配置、建立本地仓库、本地仓库的基本操作(查看工作区的文件状态,添加
    Git介绍一、为什么要学习Git?在开发一个软件时,这份工作通常需要一个team来完成。我们把这个软件划分为不同的模块,每个人负责一个模块的开发和维护。在这个过程中,如何保持team中成员软件开发的同步,保存开发周期中各个历史版本,解决team中成员间开发的版本冲突?Git是对这个问题......
  • ETM5900谈谈用java处理excel问题
    ETM5900  Assignment1Question1[Total23Marks]Agroupofresearchersareinterestedinstudyingtheprevalenceofobesity,diabetes,andothercardiovascularriskfactorsinSubangJaya,Selangor.Togainmoreinsightintothisquestion,1150subjectswe......