NPOI插入图片到excel指定单元格

先看效果图

代码

//创建一个工作簿
        HSSFWorkbook workbook = new HSSFWorkbook();
        //创建一个sheet
        ISheet sheet1 = workbook.CreateSheet("sheet1");
        // 设置列宽,excel列宽每个像素是1/256
        sheet1.SetColumnWidth(0, 18 * 256);
        sheet1.SetColumnWidth(1, 18 * 256);
        IRow rowHeader = sheet1.CreateRow(0);//创建表头行
        rowHeader.CreateCell(0, CellType.STRING).SetCellValue("生产单号");
        rowHeader.CreateCell(1, CellType.STRING).SetCellValue("图片");
        DataTable dt = sqlhelperPro.seachData("SELECT top 3 PRODID,KTL_PIC FROM Long_tmpPIC");
        if (dt.Rows.Count > 0)
        {
            int rowline = 1;//从第二行开始(索引从0开始)
            foreach (DataRow datarow in dt.Rows)
            {
                IRow row = sheet1.CreateRow(rowline);
                //设置行高 ,excel行高度每个像素点是1/20
                row.Height = 80 * 20;
                  //填入生产单号
                row.CreateCell(0, CellType.STRING).SetCellValue(datarow["PRODID"].ToString());
                  //将图片文件读入一个字符串
               byte[] bytes = System.IO.File.ReadAllBytes(datarow["KTL_PIC"].ToString());
               int pictureIdx=workbook.AddPicture(bytes,PictureType.JPEG);
             HSSFPatriarch patriarch = (HSSFPatriarch)sheet1.CreateDrawingPatriarch();
            // 插图片的位置  HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2) 后面再作解释
             HSSFClientAnchor anchor = new HSSFClientAnchor(70, 10,0,0, 1,rowline, 2, rowline +1);
            //把图片插到相应的位置
             HSSFPicture pict = (HSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);
                rowline++;
            }
        }
        NPOIDowmLoad(workbook);//下载excel

参数的解析: HSSFClientAnchor(int dx1,int dy1,int dx2,int dy2,int col1,int row1,int col2,int row2)

dx1:图片左边相对excel格的位置(x偏移) 范围值为:0~1023;即输10 偏移的位置大概是相对于整个单元格的宽度的100除以1023大概是10分之一

dy1:图片上方相对excel格的位置(y偏移) 范围值为:0~256 原理同上。

dx2:图片右边相对excel格的位置(x偏移) 范围值为:0~1023; 原理同上。

dy2:图片下方相对excel格的位置(y偏移) 范围值为:0~256 原理同上。

col1和row1 :图片左上角的位置,以excel单元格为参考,比喻这两个值为(1,1),那么图片左上角的位置就是excel表(1,1)单元格的右下角的点(A,1)右下角的点。

col2和row2:图片右下角的位置,以excel单元格为参考,比喻这两个值为(2,2),那么图片右下角的位置就是excel表(2,2)单元格的右下角的点(B,2)右下角的点。

 以上纯属个人开发经验欢迎指正

NPOI 用法可参考官网(中文) http://tonyqus.sinaapp.com/

时间: 2025-01-10 08:37:07

NPOI插入图片到excel指定单元格的相关文章

使用VBA将Excel指定单元格数据、字符串或者图表对象插入到Word模板指定书签处

准备工作: 1.首先需要提供一个word模板,并且标记好您要插入书签的位置,定义书签的命名.如图 2.模拟您要插入的Excel原始数据和图表对象 插入代码如下: Private Sub CommandButton1_Click() Dim App, WrdDoc, Mypath As String On Error Resume Next '定义原始模板的储存路径,默认和excel在同一路径 Mypath = ThisWorkbook.Path & "\模板.doc" '用Se

C#实现对EXCEL指定单元格进行操作

using System; using System.Collections.Generic; using System.Text; //先添加引用 using Microsoft.Office.Interop.Excel; using System.IO; using System.Reflection;   namespace SighExcel {     public class Sign     {         /// <summary>         /// 对Excel指定

C#修改 Excel指定单元格的值

/// <summary> /// 将指定字符串写入指定单元格中 /// </summary> /// <param name="data">要写入的数据源</param> /// <param name="sheetName">工作表名称(全路径+EXCEL表名称)</param> /// <param name="row">第几行</param>

c#在Excel指定单元格中插入图片

方法一: /// 将图片插入到指定的单元格位置,并设置图片的宽度和高度./// 注意:图片必须是绝对物理路径/// </summary>/// <param name="RangeName">单元格名称,例如:B4</param>/// <param name="PicturePath">要插入图片的绝对路径.</param>public void InsertPicture(string RangeNam

vba打开excel文件遍历sheet的名字和指定单元格的值

今天项目上有个应用,获取指定Excel文件下的所有sheet的名称以及当前sheet中指定单元格的值,并把他们写到固定的sheet中去,看了下,文件比较多,而且每个文件sheet的个数比较多,也不一样,所以打算写个程序来帮我们实现任务,代码很简单,也写的比较死板.欢迎大家给出意见及你的代码: Sub aaaa() Dim sh1, sh2 As Worksheet Dim shName, cellValue As String 'On Error Resume Next Set sh1 = Wo

excel 截取单元格部分内容(从指定位置截取)

excel 截取单元格部分内容(从指定位置截取) CreateTime--2018年5月28日08:28:46 Author:Marydon 1.情景展示 截取手机号后6位 2.实现 语法说明:right(单元格,num) 根据单元格内容,从右边开始截取num位 3.从左边截取num位 语法说明:left(单元格,num) 根据单元格内容,从左边截取num位 相关推荐: excel 如何为列添加指定内容(字符串) 原文地址:https://www.cnblogs.com/Marydon20170

[Excel VBA]单元格区域引用方式的小结

在使用ExcelVBA进行编程时,我们通常需要频繁地引用单元格区域,然后再使用相应的属性和方法对区域进行操作.所谓单元格区域,指的是单个的单元格.或者是由多个单元格组成的区域.或者是整行.整列等.下面,我们设定一些情形,以问答的形式对引用单元格区域的方式进行归纳. 问题一:在VBA代码中,如何引用当前工作表中的单个单元格(例如引用单元格C3)?回答:可以使用下面列举的任一方式对当前工作表中的单元格(C3)进行引用.(1) Range("C3")(2) [C3](3) Cells(3,

excel 根据单元格内容自动调整列宽

excel 根据单元格内容自动调整列宽 CreateTime--2018年5月28日08:49:40 Author:Marydon 1.情景展示 单元格宽度超过了列宽 2.解决方案 第一步:同时选中A,B,C三列 鼠标移至A列第一行,鼠标样式会变成向下箭头↓,点击A,会选中A列所有内容, 同样按住Ctrl键不放,依次点击B列.C列 第二步:开始菜单-->格式-->点击"自动调整列宽"即可. k 3.自动调整行高 可以根据单元格实际内容高度,调整行高 选中要调整的行即可. 相

[从产品角度学EXCEL 03]-单元格的秘密

这是<从产品角度学EXCEL>系列——单元格的秘密. 前言请看: 0 为什么要关注EXCEL的本质 1 EXCEL是怎样运作的 2 EXCEL里的树形结构 或者你可以去微信公众号@尾巴说数 获得连载目录. 本文仅由尾巴本人发布于特定网站.不接受任何无授权转载,如需转载,请先联系我,非常感谢. 在讲了excel的树形结构之后,我们终于要进入正题,研究单元格的秘密了. 当我们打开excel的时候,首先映入眼帘的就是一大片格子,这就是单元格. 在excel里,单元格承担了几乎所有的存储信息的功能.你