翼度科技»论坛 编程开发 .net 查看内容

Dotnet6 NPOI操作Excel基本操作总结

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
背景


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


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

使用方法


  • 获取相应文档对象
  1. public static IWorkbook OpenWorkbook(string path)
  2.         {
  3.             using (var stream = File.OpenRead(path))
  4.             {
  5.                 if (Path.GetExtension(path) == ".xls")
  6.                     return new HSSFWorkbook(stream);
  7.                 else
  8.                     return new XSSFWorkbook(stream);
  9.             }
  10.         }
复制代码

  • 根据序号获取相应sheet对象,并复制该sheet,添加到原Excel第一个
  1. public static void MoveAndCopySheet(string path, int index = 0)
  2.         {
  3.             var workbook = OpenWorkbook(path);
  4.             var sheet = workbook.GetSheetAt(index);
  5.             if (sheet == null)
  6.                 throw new Exception($"Sheet 'At {index}' not found.");
  7.             
  8.             var clonedSheet = workbook.CloneSheet(0);
  9.             var cloneSheetName =  $"{sheet.SheetName}_copy_{DateTime.Now.ToShortTimeString().Replace(":","-")}";
  10.             workbook.SetSheetName(workbook.GetSheetIndex(clonedSheet), cloneSheetName);
  11.             workbook.SetSheetOrder(cloneSheetName, 0);
  12.             using (var stream = File.OpenWrite(path))
  13.             {
  14.                 workbook.Write(stream);
  15.             }
  16.         }
复制代码

  • 根据sheet名称,复制,并移动到第一个
  1. public static void MoveAndCopySheet(string path, string sheetName)
  2.         {
  3.             var workbook = OpenWorkbook(path);
  4.             var sheet = workbook.GetSheet(sheetName);
  5.             if (sheet == null)
  6.                 throw new Exception($"Sheet '{sheetName}' not found.");
  7.             workbook.SetSheetOrder(sheetName, 0);
  8.             var clonedSheet = workbook.CloneSheet(0);
  9.             workbook.SetSheetName(workbook.GetSheetIndex(clonedSheet), sheetName + "_copy");
  10.             using (var stream = File.OpenWrite(path))
  11.             {
  12.                 workbook.Write(stream);
  13.             }
  14.         }
复制代码

  • 循环行,判断对应单元格内容类型
[code] 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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具