先看效果图

下载NPOI组件(2.0以上支持.xlsx和.xls的excel,2.0以下只支持.xls)

NPOI下载官网http://npoi.codeplex.com

下载解压,里面有个dotnet4的文件夹,把它拖到自己的项目中,把里面的.dll全部添加引用

引入全名空间:

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;

代码

//创建一个工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
//创建一个sheet
ISheet sheet1 = workbook.CreateSheet("sheet1");
// 设置列宽,excel列宽每个像素是1/256
sheet1.SetColumnWidth(, * );
sheet1.SetColumnWidth(, * );
IRow rowHeader = sheet1.CreateRow();//创建表头行
rowHeader.CreateCell(, CellType.STRING).SetCellValue("生产单号");
rowHeader.CreateCell(, CellType.STRING).SetCellValue("图片");
DataTable dt = sqlhelperPro.seachData("SELECT top 3 PRODID,KTL_PIC FROM Long_tmpPIC");
if (dt.Rows.Count > )
{
int rowline = ;//从第二行开始(索引从0开始)
foreach (DataRow datarow in dt.Rows)
{
IRow row = sheet1.CreateRow(rowline);
//设置行高 ,excel行高度每个像素点是1/20
row.Height = * ;
//填入生产单号
row.CreateCell(, 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(, ,,, ,rowline, , rowline +);
//把图片插到相应的位置
HSSFPicture pict = (HSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);
rowline++;
}
}
//把文件保存到d:\aaa.xls,注意扩展名是.xls不要写成.xlsx
using (Stream stream = File.OpenWrite("d:\aaa.xls"))
{
workbook.Write(stream);
}
//如果要操作.xlsx的excel,引入命名空间 using NPOI.XSSF.UserModel;
// 然后把所有的HSS改为XSS(比喻HSSWorkbook->XSSWorkbook)

 

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

dx1:图片左边相对excel格的位置(x偏移) 范围值为:0~1023;即输100 偏移的位置大概是相对于整个单元格的宽度的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/

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

  1. C# 插入条码到Excel指定单元格

    .NET中Barcode Library的应用二 介绍 在上一篇中我已经简单介绍了这个函数库(条形码应用之一------------函数库的简介).在这一篇中我将使用这个库提供更多的操作,希望对大家有 ...

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

    准备工作: 1.首先需要提供一个word模板,并且标记好您要插入书签的位置,定义书签的命名.如图 2.模拟您要插入的Excel原始数据和图表对象 插入代码如下: Private Sub Command ...

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

    using System; using System.Collections.Generic; using System.Text; using Microsoft.Office.Interop.Ex ...

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

    /// <summary> /// 将指定字符串写入指定单元格中 /// </summary> /// <param name="data">要 ...

  5. 使用net core 6 c# 的 NPOI 包,读取excel..xlsx单元格内的图片,并存储到指定服务器

    这个是记录,单元格的图片. 直接上代码,直接新建一个 net core api 解决方案,引用一下nuget包.本地创建一个 .xlsx 格式的excel文件 using ICSharpCode.Sh ...

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

    方法一: /// 将图片插入到指定的单元格位置,并设置图片的宽度和高度./// 注意:图片必须是绝对物理路径/// </summary>/// <param name="R ...

  7. NPOI 在指定单元格导入导出图片

    NPOI 在指定单元格导入导出图片 Intro 我维护了一个 NPOI 的扩展,主要用来导入导出 Excel 数据,最近有网友提出了导入 Excel 的时候解析图片的需求,于是就有了本文的探索 导入E ...

  8. NPOI扩展--判断指定单元格是否为合并单元格和输出该单元格的行列跨度(维度)

    因工作需要用到跨合并单元格获取数据,所以写了个NPOI扩展类. 主要方法如下: 1.判断指定行/列索引(单元格)是否为合并单元格. 2.获取指定列索引的实际含有数据的单元格. 3.返回指定行/列索引的 ...

  9. 27.openpyxl 向指定单元格添加图片并修改图片大小 以及修改单元格行高列宽

    openpyxl 向指定单元格添加图片并修改图片大小 以及修改单元格行高列宽 from openpyxl import Workbook,load_workbook from openpyxl.dra ...

随机推荐

  1. Python模块操作

    Exceptions 模块 该模块定义了以下标准异常: • Exception 是所有异常的基类. 强烈建议(但不是必须)自定义的异常异常也继承这个类. • SystemExit(Exception) ...

  2. SVN使用指引(Windows)

    SVN使用指引(本地服务器为Windows) 原:http://wiki.open.qq.com/wiki/SVN%E4%BD%BF%E7%94%A8%E6%8C%87%E5%BC%95%EF%BC% ...

  3. Linux时间子系统之一:clock source(时钟源)

    clock source用于为Linux内核提供一个时间基线,如果你用linux的date命令获取当前时间,内核会读取当前的clock source,转换并返回合适的时间单位给用户空间.在硬件层,它通 ...

  4. python函数调用的四种方式 --基础重点

    第一种:参数按顺序从第一个参数往后排#标准调用 # -*- coding: UTF-8 -*- def normal_invoke(x, y): print "--normal_invoke ...

  5. python3中使用builtwith的方法(很详细)

    1. 首先通过pip install builtwith安装builtwith C:\Users\Administrator>pip install builtwith Collecting b ...

  6. 3. Java面向对象之泛型-指定多个泛型

    3. Java面向对象之泛型-指定多个泛型 package generic; class MutiGeneric<K, T> { private K key; private T take ...

  7. spring MVC 管理HttpClient---实现在java中直接向Controller发送请求

    在spring MVC中,大多数时候是由客户端的页面通过ajax等方式向controller发送请求,但有时候需要在java代码中直接向controller发送请求,这时可以使用HttpCilent实 ...

  8. QM4_Probability

    Basic Concepts Probability concepts Terms Random variable A quantity whose possible values are uncer ...

  9. Python 作用域, 局部与全局变量

    全局与局部变量 在子程序(函数)中定义的变量称为局部变量, 在程序的一开始定义的变量称为全局变量 全局变量作用于整个程序, 局部变量作用域是定义该变量的子程序 当全局变量与局部变量重名时: 在定义局部 ...

  10. java编程思想-第五章-某些练习题

    参考https://blog.csdn.net/caroline_wendy/article/details/46844651 10&11 finalize()被调用的条件 Java1.6以下 ...