使用NPOI向Excel单元格中插入图片
使用NPOI向Excel单元格中插入图片
- 目标
- 代码
- 参考文章
目标
需要向Excel中的某一列插入图片,每行的图片大小一致。
此方法仅适用于使用NPOI向xlsx文件中的指定单元格插入图片。
代码
以下示例将向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);}}
}
运行效果如下图所示
在此记录注意点
- NPOI的行高将1个像素分为16份,即设置值应该等于图片像素高*16
- NPOI的列宽将1个像素分为32分,即设置值应该等于图片像素宽*32
- 确定图像位置时
XSSFClientAnchor(int dx1, int dy1, int dx2, int dy2, int col1, int row1, int col2, int row2)
前四个参数是单元格内的偏移量:
dx1、dy1是图片的左上角在起始单元格中的偏移。dx2、dy2是图片的右下角在结束单元格中的偏移。详情可参考以下文章
HSSFClientAnchor 参数说明
后四个参数是设置图片的起始单元格和结束单元格:
因为我需要在一个单元格中显示图片,所以图片的起始单元格和结束单元格这里只跨越了一个单元格。
- 若需要写入大量图片时可以采用分批次写入,例如每次写入50张图片保存后重新打开继续写入,以保证中途关闭时仍能保留部分数据。
参考文章
HSSFClientAnchor 参数说明
XSSFClientAnchor Dx,Dy参数无效
XSSFClientAnchor文档
使用NPOI向Excel单元格中插入图片相关推荐
- java 向word中添加excel附件并向excel单元格中加入图片并压缩图片并根据图片动态控制单元格高度宽度
word中加入excel附件 excel单元格中插入图片 word freemarker Excel poi 制作, jxl 插入图片 压缩图片/宽高,动态控制单元格高度与宽度 1.word 需要模板 ...
- 在EXCEL单元格中插入迷你图
在EXCEL单元格中插入迷你图 选中要插入图片的单元格,插入-迷你图-折线图-数据范围-确定-显示-标记 注:如果遇到插入-迷你图的位置为灰色: 更改EXCEL文件格式
- delphi 往 excel 指定单元格中插入图片
delphi 往 excel 指定单元格中插入图片 EApp.ActiveSheet.Range['imagepath'].select; //--选定插入图片的单元格EApp.ActiveSheet ...
- 如何在excel2019指定的单元格中插入图片
最近,要完成一些论文的调研及整理工作,针对各个论文中提到的方法,系统模型等. 原想在单元格中插入图片,发现单元格右键插入,压根就没插入图片这一项功能,如图所示 故在菜单栏中,找到插入 -> 图片 ...
- Excel 单元格中插入附件
操作步骤: 1,选中一个单元格 2,选择Excel菜单蓝中的插入菜单项,点击对象(如图1) 3,弹出弹框,勾选显示为图标(如图2) 4,点击预览,选择要添加的附件
- Excel - 单元格内插入图片,并随单元格变动
文章目录 1)插入图片 放到单元格内 2)选择大小和属性 a) 不随单元格改变位置和大小 效果如下: b) 随单元格改变位置,但不改变大小 效果如下: 当插入图片后,有时发现在图片上方插入几行后,图片 ...
- Excel单元格内插入图片(VBA创建函数,根据图片名称批量插入)
1. 在桌面创建素材 文件夹"图库"存放要插入的图片,Excel"花"为待插入的Excel表. 2. "花"表格内容布局如下 3. 创建VB ...
- 怎样在单元格中插入图表_如何为Excel图表标签使用单元格值
怎样在单元格中插入图表 Make your chart labels in Microsoft Excel dynamic by linking them to cell values. When t ...
- 【Excel】用公式提取Excel单元格中的汉字
昨天一个前端的朋友找我帮忙用excel提取代码中的汉字(字符串),可算费了劲儿了,他要提取的内容均在单引号中,但问题是没有统一的规律,同一个单元格可能存在多个要提取的内容,而且汉字中间也夹杂其他字符. ...
最新文章
- 8.6 GOF设计模式四: 策略模式… Strategy Pattern
- ppt复制切片器_这6个新手必学的PPT技能,让你效率提升10倍!套模板都比别人快...
- Java基础学习总结(136)——有关流资源关闭(try-with-resources与AutoCloseable)的使用总结
- CGI、PHP-CGI、FastCGI
- 离散型概率分布的抽样
- Linux学习笔记(11)
- excel多元线性拟合_excel透视+多元线性回归
- Linux —— 软件安装
- 操作系统的作用及类别
- 如何一键批量转换Excel里面的“文本形式数字”为“数值型数字”
- 项目中对微信昵称特殊字符的处理
- 搜索引擎高级搜索指令
- 用python来控制wifi连接
- Ubuntu18.04鼠标闪烁、无线网卡不识别问题
- [Git]如何撤销上次commit
- 操作系统基本原理概述
- JMM 8 大原子操作
- html5左侧边导航右边显示页面,bootstrap如何实现左侧导航栏右侧网页
- CSS——CSS样式的几种写法
- TP6框架--EasyAdmin学习笔记:Excel表单导入数据库
热门文章
- 关于呼叫转移的知识点
- 电脑计算机考证中级四级
- AHP算法(一)----算法介绍
- iOS 6苹果地图应用(MapKit)-打开外部应用(导航)
- 简历上写精通Nginx/OpenResty详解,Nginx的核心原理应该不过分吧
- Python入门(二十一)- 常见模块
- 小程序发布上线流程_微信小程序提交审核并发布详细流程
- Teamviewer 14 破解【检测商业用途,5分钟限制】 for macOS Mojave 10.14
- 基于springboot实现秋月堂茶室用品茶具管理系统的设计与实现【附项目源码+论文说明】
- 【mybatis源码分析(四)】mybatis事务实现原理