git地址:https://github.com/KaiZons/-NPOI-Excel-.git/** Author:zhoukaikai* 注意:本项目中使用的NPOI版本为 V2.4.1.0;需要在NuGet上添加NPOI包* 如果发现图片位置错误 或 图片不显示,请先确认NPOI版本是否与本项目一致*/class Program{static void Main(string[] args){string excelPath = @"D:\利用NPOI向Excel指定位置中加入图片\excel.xlsx";//string excelPath = @"D:\利用NPOI向Excel指定位置中加入图片\excelXLS.xls";string imgPath = @"D:\利用NPOI向Excel指定位置中加入图片\image.png";string fileExtensionName = Path.GetExtension(excelPath);if (fileExtensionName.ToLower() == ".xlsx"){InsertImageToXLSXExcel(excelPath, imgPath);}if (fileExtensionName.ToLower() == ".xls"){InsertImageToXLSExcel(excelPath, imgPath);}}/// <summary>/// .xlsx后缀的Excel文件添加图片/// </summary>/// <param name="excelPath"></param>/// <param name="imgPath"></param>public static void InsertImageToXLSXExcel(string excelPath, string imgPath){try{using (FileStream fs = new FileStream(excelPath, FileMode.Open))//获取指定Excel文件流{//创建工作簿XSSFWorkbook xssfworkbook = new XSSFWorkbook(fs);//获取第一个工作表(下标从0起)XSSFSheet sheet = (XSSFSheet)xssfworkbook.GetSheet(xssfworkbook.GetSheetName(0));//获取指定图片的字节流byte[] bytes = System.IO.File.ReadAllBytes(imgPath);//将图片添加到工作簿中,返回值为该图片在工作表中的索引(从0开始)//图片所在工作簿索引理解:如果原Excel中没有图片,那执行下面的语句后,该图片为Excel中的第1张图片,其索引为0;//同理,如果原Excel中已经有1张图片,执行下面的语句后,该图片为Excel中的第2张图片,其索引为1;int pictureIdx = xssfworkbook.AddPicture(bytes, PictureType.JPEG);//创建画布XSSFDrawing patriarch = (XSSFDrawing)sheet.CreateDrawingPatriarch();//设置图片坐标与大小//函数原型:XSSFClientAnchor(int dx1, int dy1, int dx2, int dy2, int col1, int row1, int col2, int row2);//坐标(col1,row1)表示图片左上角所在单元格的位置,均从0开始,比如(5,2)表示(第六列,第三行),即F3;注意:图片左上角坐标与(col1,row1)单元格左上角坐标重合//坐标(col2,row2)表示图片右下角所在单元格的位置,均从0开始,比如(10,3)表示(第十一列,第四行),即K4;注意:图片右下角坐标与(col2,row2)单元格左上角坐标重合//坐标(dx1,dy1)表示图片左上角在单元格(col1,row1)基础上的偏移量(往右下方偏移);(dx1,dy1)的最大值为(1023, 255),为一个单元格的大小//坐标(dx2,dy2)表示图片右下角在单元格(col2,row2)基础上的偏移量(往右下方偏移);(dx2,dy2)的最大值为(1023, 255),为一个单元格的大小//注意:目前测试发现,对于.xlsx后缀的Excel文件,偏移量设置(dx1,dy1)(dx2,dy2)无效;只会对.xls生效XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, 5, 2, 10, 3);//正式在指定位置插入图片XSSFPicture pict = (XSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);//创建一个新的Excel文件流,可以和原文件名不一样,//如果不一样,则会创建一个新的Excel文件;如果一样,则会覆盖原文件FileStream file = new FileStream(excelPath, FileMode.Create);//将已插入图片的Excel流写入新创建的Excel中xssfworkbook.Write(file);//关闭工作簿xssfworkbook.Close();}}catch (Exception ex){throw new Exception(ex.Message);}}/// <summary>/// .xls后缀的Excel文件添加图片/// </summary>/// <param name="excelPath"></param>/// <param name="imgPath"></param>public static void InsertImageToXLSExcel(string excelPath, string imgPath){byte[] bytes = System.IO.File.ReadAllBytes(imgPath);try{using (FileStream fs = new FileStream(excelPath, FileMode.Open)){HSSFWorkbook hssfworkbook = new HSSFWorkbook(fs);HSSFSheet sheet = (HSSFSheet)hssfworkbook.GetSheet(hssfworkbook.GetSheetName(0));int pictureIdx = hssfworkbook.AddPicture(bytes, PictureType.JPEG);HSSFPatriarch patriarch = (HSSFPatriarch)sheet.CreateDrawingPatriarch();HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1023, 255, 5, 2, 10, 3);//(255, 125, 1023, 150, 5, 2, 10, 3);//(0, 0, 0, 0, 5, 2, 10, 3);HSSFPicture pict = (HSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);FileStream file = new FileStream(excelPath, FileMode.Create);hssfworkbook.Write(file);hssfworkbook.Close();}}catch (Exception ex){throw new Exception(ex.Message);}}}

详解 利用NPOI向Excel指定位置中加入图片(支持.xlsx和.xls)相关推荐

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

    使用NPOI向Excel单元格中插入图片 目标 代码 参考文章 目标 需要向Excel中的某一列插入图片,每行的图片大小一致. 此方法仅适用于使用NPOI向xlsx文件中的指定单元格插入图片. 代码 ...

  2. python middleware模块_详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击...

    一.在django后台处理 1.将django的setting中的加入django.contrib.messages.middleware.MessageMiddleware,一般新建的django项 ...

  3. C#利用NPOI导出Excel

    C#利用NPOI导出Excel 第一篇文章 View Code 1 using System; 2 using System.Collections.Generic; 3 using System.L ...

  4. 详解利用基于gensim的TF-IDF算法实现基于文本相似度的推荐算法

    详解利用基于gensim的TF-IDF算法实现基于文本相似度的推荐算法 TF-IDF的基本原理 算法思想 计算公式 相似度计算原理 微型图书推荐案例 案例背景 开发工具 数据预处理 TF-IDF模型建 ...

  5. python zxing 识别条码_详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强...

    前言 这周和大家分享如何用python识别图像里的条码.用到的库可以是zbar.希望西瓜6辛苦码的代码不要被盗了.(zxing的话,我一直没有装好,等装好之后再写一篇) 具体步骤 前期准备 用open ...

  6. 详解自注意力机制及其在LSTM中的应用

    详解自注意力机制及其在LSTM中的应用 注意力机制(Attention Mechanism)最早出现在上世纪90年代,应用于计算机视觉领域.2014年,谷歌Mnih V等人[1] 在图像分类中将注意力 ...

  7. python最小值函数_Python3 min() 函数详解 获取多个参数或列表中的最小值

    Python3 min() 函数详解 获取多个参数或列表中的最小值 min()函数的主要作用是获取对象中最小的值,参数可以是任何可迭代对象(字符串.列表.元组.字典等),可以是一个参数内的值进行对比, ...

  8. python-docx对Word文档的指定位置(批量)插入图片

    python-docx对Word文档的指定位置(批量)插入图片 任务 实现自动化办公,对请假条.docx文件实现自动插入请假人签名图片. 技术方案 1.python-docx python-docx是 ...

  9. xp如何添加桌面计算机回收站,详解桌面回收站图标在XP电脑中操作删除的详细步骤...

    我们在电脑的很多的设置中,很多的用户都是可以打开不同的版本来设置电脑的问题的,对于电脑的回收站图标的设置有的小伙伴不是很喜欢使用桌面的这个图标怎么直接删除回收站图标的呢,今天小编就来跟大家分享一下XP ...

最新文章

  1. [Android Pro] ScrollView使用fillViewport设置高度为MatchParent
  2. 考系统架构设计师必看--微内核操作系统
  3. 《剑指offer》给定一颗二叉搜索树,请找出其中的第k大的结点。
  4. 机器学习-算法背后的理论与优化(part1)--从线性回归到逻辑回归
  5. 成长 | 《大厂晋升指南》学习总结(中)
  6. P3188-[HNOI2007]梦幻岛宝珠【背包】
  7. 蔬菜大棚成本_蔬菜大棚建设标准和成本
  8. 作为相亲大户,程序猿为何普遍单身?
  9. Qt Creator 设置默认编码格式为 UTF-8
  10. DDL、DML、TCL
  11. 简洁好用的Geek Unіnstaller
  12. mysql 字段字符串转int_MySQL数据库面试题(2020最新版)(一)
  13. modbus slave和modbus poll使用说明
  14. micro入门指南——核心功能介绍
  15. Mac磁盘工具无法将APFS硬盘转化为txFAT格式的解决办法
  16. 关于OpenGL的天空盒的理解
  17. dict.get / dict.setdefault / defaultdict
  18. 写mall项目报错Tests run: 1, Failures: 0, Errors
  19. Bluedroid: 蓝牙协议栈源码剖析
  20. SD卡数据读取Altium Designer下载

热门文章

  1. 在故事板中加载 nib 时 IBOutlet 为 nil
  2. 【数据挖掘】金融风控 Task02 数据分析
  3. 我的苹果电脑中毒了?mac也会中病毒?喜闻乐见(附杀毒软件测试)
  4. Java8两个list集合合并成一个list集合
  5. win7插了耳机还是外放_安卓手机用耳机听歌音量太大怎么办
  6. 164. Maximum Gap 1
  7. CCM单电压环BUCK开关变换器传递函数理论分析与simulink估算对比
  8. 网上千万不要在非官方直营店铺买的商品排行榜
  9. oppor11点击android版本,(周末回归)oppor11旧手机REC教程更新
  10. 2020 蓝桥杯大学 B 组省赛模拟赛 七巧板