iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >怎么在c#中利用NPOI 在指定单元格中导入导出图片
  • 151
分享到

怎么在c#中利用NPOI 在指定单元格中导入导出图片

2023-06-06 16:06:32 151人浏览 泡泡鱼
摘要

怎么在C#中利用NPOI 在指定单元格中导入导出图片?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。导入excel 时解析图片xls 和 xlsx 的 api 稍有不同,详细

怎么在C#中利用NPOI 在指定单元格中导入导出图片?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

导入excel 时解析图片

xls 和 xlsx 的 api 稍有不同,详细可以直接参考以下代码,实现代码如下:

public static Dictionary<CellPosition, IPictureData> GetPicturesAndPosition(this ISheet sheet){  var dictionary = new Dictionary<CellPosition, IPictureData>();  if (sheet.Workbook is HSSFWorkbook)  {    foreach (var shape in ((HSSFPatriarch)sheet.DrawingPatriarch).Children)    {      if (shape is HSSFPicture picture)      {        var position = new CellPosition(picture.ClientAnchor.Row1, picture.ClientAnchor.Col1);        dictionary[position] = picture.PictureData;      }    }  }  else if (sheet.Workbook is XSSFWorkbook)  {    foreach (var shape in ((XSSFDrawing)sheet.DrawingPatriarch).GetShapes())    {      if (shape is XSSFPicture picture)      {        var position = new CellPosition(picture.ClientAnchor.Row1, picture.ClientAnchor.Col1);        dictionary[position] = picture.PictureData;      }    }  }  return dictionary;}

CellPosition 是一个自定义的结构体,表示当前单元格的位置,源码如下:

public readonly struct CellPosition : IEquatable<CellPosition>{  public CellPosition(int row, int col)  {    Row = row;    Column = col;  }  public int Row { get; }  public int Column { get; }  public bool Equals(CellPosition other)  {    return Row == other.Row && Column == other.Column;  }  public override bool Equals(object? obj) => obj is CellPosition other && Equals(other);  public override int GetHashCode() => $"{Row}_{Column}".GetHashCode();}

根据上面的代码,我们就可以获取到获取到所有的图片以及图片的所在位置,这样根据单元格位置去找图片信息的时候就会很方便了

导出 Excel 时设置图片

实现代码如下:

public static bool TryAddPicture(this ISheet sheet, int row, int col, byte[] pictureBytes, PictureType pictureType = PictureType.PNG){  if (sheet is null)  {    throw new ArgumentNullException(nameof(sheet));  }  try  {    var pictureIndex = sheet.Workbook.AddPicture(pictureBytes, pictureType);    var clientAnchor = sheet.Workbook.GetCreationHelper().CreateClientAnchor();    clientAnchor.Row1 = row;    clientAnchor.Col1 = col;    var picture = (sheet.DrawingPatriarch ?? sheet.CreateDrawingPatriarch())      .CreatePicture(clientAnchor, pictureIndex);    picture.Resize();    return true;  }  catch (Exception e)  {    Debug.WriteLine(e);  }  return false;}

通过上面的代码我们就可以在指定的单元格设置图片,目前没有支持单元格合并操作,有需要自己进行修改

WeihanLi.Npoi

WeihanLi.Npoi 在 1.15.0 版本中增加了图片导入导出的支持,使用示例可以参考下面的单元测试

[Theory][ExcelFORMatData]public async Task ImageImportExportTest(ExcelFormat excelFormat){  using var HttpClient = new HttpClient();  var imageBytes = await httpClient.GetByteArrayAsync("https://file.lsjlt.com/upload/202306/06/vhwdubng0kc.jpg");  var list = Enumerable.Range(1, 5)    .Select(x => new ImageTest() { Id = x, Image = imageBytes })    .ToList();  var excelBytes = list.ToExcelBytes(excelFormat);  var importResult = ExcelHelper.ToEntityList<ImageTest>(excelBytes, excelFormat);  Assert.NotNull(importResult);  Assert.Equal(list.Count, importResult.Count);  for (var i = 0; i < list.Count; i++)  {    Assert.NotNull(importResult[i]);    var result = importResult[i]!;    Assert.Equal(list[i].Id, result.Id);    Assert.NotNull(result.Image);    Assert.True(list[i].Image.SequenceEqual(result.Image));  }}private class ImageTest{  public int Id { get; set; }  public byte[] Image { get; set; } = null!;}

导入时会自动将 byte[] 类型的属性尝试获取对应的单元格位置的图片,如果在对应的位置找到了图片就能够读取到图片的字节数组信息映射到 model 里的字节数组属性

关于怎么在c#中利用NPOI 在指定单元格中导入导出图片问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: 怎么在c#中利用NPOI 在指定单元格中导入导出图片

本文链接: https://www.lsjlt.com/news/247940.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在c#中利用NPOI 在指定单元格中导入导出图片
    怎么在c#中利用NPOI 在指定单元格中导入导出图片?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。导入Excel 时解析图片xls 和 xlsx 的 API 稍有不同,详细...
    99+
    2023-06-06
  • 怎么在linux中导出导入.sql文件
    本篇文章为大家展示了怎么在linux中导出导入.sql文件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。什么是Linux系统Linux是一种免费使用和自由传播的类U...
    99+
    2024-04-02
  • C#中怎么使用Npoi导出Excel合并行列
    这篇文章主要讲解了“C#中怎么使用Npoi导出Excel合并行列”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#中怎么使用Npoi导出Excel合并行列”吧!现在用Npoi导出Excel,...
    99+
    2023-06-29
  • 怎么在Linux中导入导出mysql数据库
    这篇文章给大家介绍怎么在Linux中导入导出mysql数据库,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。什么是Linux系统Linux是一种免费使用和自由传播的类UNIX操作系统,是...
    99+
    2024-04-02
  • 怎么在Oracle中导出导入统计信息
    怎么在Oracle中导出导入统计信息?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。schema级别统计信息的导出导入  通过调...
    99+
    2024-04-02
  • 递归在 C++ 中的应用:深入浅出实操指导
    递归是一种函数调用自身的编程技术,适用于分而治之的问题。在 c++++ 中,递归函数定义为:returntype functionname(parameters),需有明确的基线情况(终...
    99+
    2024-05-01
    c++ 递归
  • 怎么在python中使用impor方法导入导出数据
    怎么在python中使用impor方法导入导出数据?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科...
    99+
    2023-06-14
  • mysql中怎么利用Navicat导出和导入数据库
    这期内容当中小编将会给大家带来有关mysql中怎么利用Navicat导出和导入数据库,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。  导出数据库:  打开Navicat ...
    99+
    2024-04-02
  • Oracle中怎么用expdb导出指定表
    在Oracle中使用expdp导出指定表的步骤如下: 打开终端或命令提示符窗口。 输入以下命令连接到数据库: sqlplus u...
    99+
    2024-04-10
    oracle
  • 怎么在Python中利用Cookies导出用户数据
    怎么在Python中利用Cookies导出用户数据?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。利用抓包工具或者Google浏览器调试模式拿到请求参数Cooki...
    99+
    2023-06-15
  • 怎么在navicat中导入excel表格数据
    本文小编为大家详细介绍“怎么在navicat中导入excel表格数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么在navicat中导入excel表格数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。基础操...
    99+
    2023-07-05
  • 怎么在navicat 中导入excel 表格数据
    基础操作篇 1. 首先打开navicat 软件,进入后打开连接  2. 进入后选择新建数据库 3. 数据库名随便输入一个,字符集选择 utf8,排序规则选择utf8_general_ci ,这样可以最大程度地支持中文 ,点击好,新建数据...
    99+
    2023-09-03
    mysql mybatis 数据库
  • 基于python利用Pyecharts使高清图片导出并在PPT中动态展示
    目录1.前言2.导出png格式图片3.如何在PPT中展示pyecharts图片1.前言 pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一...
    99+
    2024-04-02
  • python如何利用Pyecharts使高清图片导出并在PPT中动态展示
    这篇文章主要介绍python如何利用Pyecharts使高清图片导出并在PPT中动态展示,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.前言pyecharts 是一个用于生成 Echarts 图表的类库。Echar...
    99+
    2023-06-26
  • c#中label控件导入图片怎么适应大小
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-14
  • 利用java怎么从数据库中导出Excel表格
    这期内容当中小编将会给大家带来有关利用java怎么从数据库中导出Excel表格,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。基于maven jar包引入如下:  <dependency> ...
    99+
    2023-05-31
    java ava excel
  • 怎么在python中使用import导入模块
    这期内容当中小编将会给大家带来有关怎么在python中使用import导入模块,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python有哪些常用库python常用的库:1.requesuts;2.scr...
    99+
    2023-06-14
  • 怎么在Java项目中利用Servlet将图片上传到指定的文件夹中
    今天就跟大家聊聊有关怎么在Java项目中利用Servlet将图片上传到指定的文件夹中,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。步骤一:上传页面uploadphoto.jsp  需...
    99+
    2023-05-31
    java servlet ava
  • 怎么在Java项目中利用Struts将图片上传到指定文件夹
    怎么在Java项目中利用Struts将图片上传到指定文件夹?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。JSP上传页面上传一定要为form加上enctype=&...
    99+
    2023-05-31
    java struts ava
  • 怎么在html5中利用Canvas旋转图片
    这篇文章给大家介绍怎么在html5中利用Canvas旋转图片,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。移动canvas原点var img = document.getElementBy...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作