zoukankan      html  css  js  c++  java
  • NPOI插入图片到excel指定单元格

    先看效果图

    下载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(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++;
                }
            }
    //把文件保存到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/

  • 相关阅读:
    C++语法小记---string类
    C++语法小记---标准库
    C++语法小记---运算符重载
    C++语法小记---函数重载
    C++语法小记---友元
    C++语法小记---开篇
    STM32使用printf丢失第一个字母的问题
    AD芯片的基准参考电压问题
    运算放大器的调试经验
    [置顶] TIM_GetCounter与TIM_GetCapture1的区别
  • 原文地址:https://www.cnblogs.com/wei325/p/4748324.html
Copyright © 2011-2022 走看看