使用NPOI向Excel单元格中插入图片

  • 目标
  • 代码
  • 参考文章

目标

需要向Excel中的某一列插入图片,每行的图片大小一致。
此方法仅适用于使用NPOIxlsx文件中的指定单元格插入图片。

代码

以下示例将向Excel的第二行第一列写入文本信息,第二行第二列插入一张图片,并调整图片所在单元格大小与图片匹配。

using System;
using System.IO;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;namespace ExcelImg
{class Program{static void Main(string[] args){// Excel和图片放在程序根目录string exlPath = "TestExcel.xlsx";string newPath = "NewExcel.xlsx";string imgPath = "TestImg.jpg";// 图片宽高int imgWid = 477;int imgHgt = 266;// 打开ExcelIWorkbook excel = default;ISheet sheet = default;using (FileStream fs = new FileStream(exlPath, FileMode.Open, FileAccess.Read)){excel = WorkbookFactory.Create(fs);// 获取第一个表格sheet = excel.GetSheetAt(0);// 获取第二行,第一行是标题IRow row = sheet.CreateRow(1);// 为第一列设置文本row.CreateCell(0).SetCellValue("测试标题");// 设置行高和列宽sheet.SetColumnWidth(1, imgWid * 32);   // Excel的宽将1个像素分为32份row.Height = (short)(imgHgt * 16);      // Excel的高将1个像素分为16份// 添加图片// 1.以字节数组的形式读取图片byte[] buffer = GetImageBuffer(imgPath);// 2.向Excel添加图片,获取到图片索引int picIdx = excel.AddPicture(buffer, PictureType.JPEG);// 3.构建Excel图像var drawing = sheet.CreateDrawingPatriarch();// 4.确定图像的位置// new XSSFClientAnchor(int dx1, int dy1, int dx2, int dy2, int col1, int row1, int col2, int row2)// 前四个参数是单元格内的偏移量,这里需要填满整个单元格所以不设置。// col1,row1表示图片的左上角在哪个单元格的左上角;col2,row2表示图片的右下角在哪个单元格的左上角XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, 1, 1, 2, 2);// 5.将图片设置到上面的位置中drawing.CreatePicture(anchor, picIdx);}using (FileStream newFile = new FileStream(newPath, FileMode.Create, FileAccess.Write)){excel.Write(newFile);}excel?.Close();}private static byte[] GetImageBuffer(string path){return File.ReadAllBytes(path);}}
}

运行效果如下图所示

在此记录注意点

  1. NPOI的行高将1个像素分为16份,即设置值应该等于图片像素高*16
  2. NPOI的列宽将1个像素分为32分,即设置值应该等于图片像素宽*32
  3. 确定图像位置时

XSSFClientAnchor(int dx1, int dy1, int dx2, int dy2, int col1, int row1, int col2, int row2)

前四个参数是单元格内的偏移量:
dx1、dy1是图片的左上角在起始单元格中的偏移。dx2、dy2是图片的右下角在结束单元格中的偏移。详情可参考以下文章
HSSFClientAnchor 参数说明
后四个参数是设置图片的起始单元格和结束单元格:
因为我需要在一个单元格中显示图片,所以图片的起始单元格和结束单元格这里只跨越了一个单元格。

  1. 若需要写入大量图片时可以采用分批次写入,例如每次写入50张图片保存后重新打开继续写入,以保证中途关闭时仍能保留部分数据。

参考文章

HSSFClientAnchor 参数说明
XSSFClientAnchor Dx,Dy参数无效
XSSFClientAnchor文档

使用NPOI向Excel单元格中插入图片相关推荐

  1. java 向word中添加excel附件并向excel单元格中加入图片并压缩图片并根据图片动态控制单元格高度宽度

    word中加入excel附件 excel单元格中插入图片 word freemarker Excel poi 制作, jxl 插入图片 压缩图片/宽高,动态控制单元格高度与宽度 1.word 需要模板 ...

  2. 在EXCEL单元格中插入迷你图

    在EXCEL单元格中插入迷你图 选中要插入图片的单元格,插入-迷你图-折线图-数据范围-确定-显示-标记 注:如果遇到插入-迷你图的位置为灰色: 更改EXCEL文件格式

  3. delphi 往 excel 指定单元格中插入图片

    delphi 往 excel 指定单元格中插入图片 EApp.ActiveSheet.Range['imagepath'].select; //--选定插入图片的单元格EApp.ActiveSheet ...

  4. 如何在excel2019指定的单元格中插入图片

    最近,要完成一些论文的调研及整理工作,针对各个论文中提到的方法,系统模型等. 原想在单元格中插入图片,发现单元格右键插入,压根就没插入图片这一项功能,如图所示 故在菜单栏中,找到插入 -> 图片 ...

  5. Excel 单元格中插入附件

    操作步骤: 1,选中一个单元格 2,选择Excel菜单蓝中的插入菜单项,点击对象(如图1) 3,弹出弹框,勾选显示为图标(如图2) 4,点击预览,选择要添加的附件

  6. Excel - 单元格内插入图片,并随单元格变动

    文章目录 1)插入图片 放到单元格内 2)选择大小和属性 a) 不随单元格改变位置和大小 效果如下: b) 随单元格改变位置,但不改变大小 效果如下: 当插入图片后,有时发现在图片上方插入几行后,图片 ...

  7. Excel单元格内插入图片(VBA创建函数,根据图片名称批量插入)

    1. 在桌面创建素材 文件夹"图库"存放要插入的图片,Excel"花"为待插入的Excel表. 2. "花"表格内容布局如下 3. 创建VB ...

  8. 怎样在单元格中插入图表_如何为Excel图表标签使用单元格值

    怎样在单元格中插入图表 Make your chart labels in Microsoft Excel dynamic by linking them to cell values. When t ...

  9. 【Excel】用公式提取Excel单元格中的汉字

    昨天一个前端的朋友找我帮忙用excel提取代码中的汉字(字符串),可算费了劲儿了,他要提取的内容均在单引号中,但问题是没有统一的规律,同一个单元格可能存在多个要提取的内容,而且汉字中间也夹杂其他字符. ...

最新文章

  1. 8.6 GOF设计模式四: 策略模式… Strategy Pattern
  2. ppt复制切片器_这6个新手必学的PPT技能,让你效率提升10倍!套模板都比别人快...
  3. Java基础学习总结(136)——有关流资源关闭(try-with-resources与AutoCloseable)的使用总结
  4. CGI、PHP-CGI、FastCGI
  5. 离散型概率分布的抽样
  6. Linux学习笔记(11)
  7. excel多元线性拟合_excel透视+多元线性回归
  8. Linux —— 软件安装
  9. 操作系统的作用及类别
  10. 如何一键批量转换Excel里面的“文本形式数字”为“数值型数字”
  11. 项目中对微信昵称特殊字符的处理
  12. 搜索引擎高级搜索指令
  13. 用python来控制wifi连接
  14. Ubuntu18.04鼠标闪烁、无线网卡不识别问题
  15. [Git]如何撤销上次commit
  16. 操作系统基本原理概述
  17. JMM 8 大原子操作
  18. html5左侧边导航右边显示页面,bootstrap如何实现左侧导航栏右侧网页
  19. CSS——CSS样式的几种写法
  20. TP6框架--EasyAdmin学习笔记:Excel表单导入数据库

热门文章

  1. 关于呼叫转移的知识点
  2. 电脑计算机考证中级四级
  3. AHP算法(一)----算法介绍
  4. iOS 6苹果地图应用(MapKit)-打开外部应用(导航)
  5. 简历上写精通Nginx/OpenResty详解,Nginx的核心原理应该不过分吧
  6. Python入门(二十一)- 常见模块
  7. 小程序发布上线流程_微信小程序提交审核并发布详细流程
  8. Teamviewer 14 破解【检测商业用途,5分钟限制】 for macOS Mojave 10.14
  9. 基于springboot实现秋月堂茶室用品茶具管理系统的设计与实现【附项目源码+论文说明】
  10. 【mybatis源码分析(四)】mybatis事务实现原理