poi 生成word 表格,并向表格单元格中插入多个图片

接这上一篇,导入数据,也要完整导出来。话不多说,直接上代码。
效果图

  //根据实体对象 ,生成XWPFDocument
    public static XWPFDocument exportDataInfoWord(List<DataInfoEntity> list) throws NoSuchFieldException,IllegalAccessException {
        MyXWPFDocument doc = new MyXWPFDocument();
        XWPFTable table = doc.createTable(list.size() + 1, 12);
        List<TSType> types = ResourceUtil.getCacheTypes("primaryUse".toLowerCase());

        for(int colsIndex=0;colsIndex<fieldsNames.length;colsIndex++){
            XWPFTableCell cell = table.getRow(0).getCell(colsIndex);
            cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
            XWPFParagraph p1 = cell.getParagraphs().get(0);
            XWPFRun r1 = p1.createRun();
            r1.setBold(true);
            r1.setText(fieldsNames[colsIndex]);
        }

        for(int rowIndex =1, listIndex =0; listIndex<list.size();rowIndex++,listIndex++){
            Class entityClass = list.get(listIndex).getClass();
            for(int colsIndex=0;colsIndex<fields.length;colsIndex++){
                Field field = entityClass.getDeclaredField(fields[colsIndex]);
                field.setAccessible(true);
                Object value = field.get(list.get(listIndex));

                XWPFTableCell cell = table.getRow(rowIndex).getCell(colsIndex);

                if(value instanceof Date){
                    cell.setText(new SimpleDateFormat("yyyy-MM-dd").format((Date)value));
                }else if(colsIndex == 4){
                    cell.setText(list.get(listIndex).getFgTypeName());
                }else if(colsIndex == 5){
                    cell.setText(list.get(listIndex).getFgVarietiesName());
                }
                else if(colsIndex == 7){
                    for(TSType tsType:types){
                        if(tsType.getTypecode().equals(list.get(listIndex).getPrimaryUse())){
                            cell.setText(tsType.getTypename());
                        }
                    }
                }
                else if(value instanceof Float){
                    cell.setText(String.valueOf(value));
                } else if (colsIndex == 11 && value instanceof String && value!=null) {
                    setCellImage(cell,value.toString());
                }else {
                    if(value!=null){
                        cell.setText(value.toString());
                    }
                }
            }
        }

        return doc;
    }

//单元格写入图片
private static  void setCellImage(XWPFTableCell cell,String urls)  {
        if(StringUtils.isBlank(urls))
            return;
        String [] urlArray = urls.split(",");
        String ctxPath=ResourceUtil.getConfigByName("webUploadpath");
        List<XWPFParagraph> paragraphs = cell.getParagraphs();
        XWPFParagraph newPara = paragraphs.get(0);
        XWPFRun imageCellRunn = newPara.createRun();
        for(String url:urlArray){
            String downLoadPath = ctxPath+File.separator + url;
            File image = new File(downLoadPath);
            if(!image.exists()){
                continue;
            }

            int format;
            if (url.endsWith(".emf")) {
                format = XWPFDocument.PICTURE_TYPE_EMF;
            } else if (url.endsWith(".wmf")) {
                format = XWPFDocument.PICTURE_TYPE_WMF;
            } else if (url.endsWith(".pict")) {
                format = XWPFDocument.PICTURE_TYPE_PICT;
            } else if (url.endsWith(".jpeg") || url.endsWith(".jpg")) {
                format = XWPFDocument.PICTURE_TYPE_JPEG;
            } else if (url.endsWith(".png")) {
                format = XWPFDocument.PICTURE_TYPE_PNG;
            } else if (url.endsWith(".dib")) {
                format = XWPFDocument.PICTURE_TYPE_DIB;
            } else if (url.endsWith(".gif")) {
                format = XWPFDocument.PICTURE_TYPE_GIF;
            } else if (url.endsWith(".tiff")) {
                format = XWPFDocument.PICTURE_TYPE_TIFF;
            } else if (url.endsWith(".eps")) {
                format = XWPFDocument.PICTURE_TYPE_EPS;
            } else if (url.endsWith(".bmp")) {
                format = XWPFDocument.PICTURE_TYPE_BMP;
            } else if (url.endsWith(".wpg")) {
                format = XWPFDocument.PICTURE_TYPE_WPG;
            } else {
                logger.error("Unsupported picture: " + url +
                        ". Expected emf|wmf|pict|jpeg|png|dib|gif|tiff|eps|bmp|wpg");
                continue;
            }

            try (FileInputStream is = new FileInputStream(downLoadPath)) {
                imageCellRunn.addPicture(is, format, image.getName(), Units.toEMU(100), Units.toEMU(100)); // 200x200 pixels
            }catch (Exception e){
                logger.error(e.getMessage());
                e.printStackTrace();
            }
//            imageCellRunn.addBreak();

        }

    }

实体对象

package com.entity.garden;

import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.*;

import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import org.hibernate.annotations.GenericGenerator;
import org.jeecgframework.poi.excel.annotation.Excel;

/**
 * @Title: Entity
 * @Description: 上传数据信息
 * @author zhangdaihao
 * @date 2019-05-12 16:54:17
 * @version V1.0
 *
 */
@Entity
@Table(name = "g_data_info", schema = "")
@DynamicUpdate(true)
@DynamicInsert(true)
@SuppressWarnings("serial")
public class DataInfoEntity implements java.io.Serializable {
    /**id*/
    private java.lang.String id;
    /**时间*/
    @Excel(name="年份", width = 15, format = "yyyy-MM-dd")
    private java.util.Date dataInfoTime;
    /**省*/
    @Excel(name="省", width = 15)
    private java.lang.String provinceId;
    /**市*/
    @Excel(name="市", width = 15)
    private java.lang.String cityId;
    /**区*/
    @Excel(name="区或县", width = 15)
    private java.lang.String areaId;

    @Excel(name="果蔬种类", width = 15)
    @Transient
    private  String fgTypeName;

    @Excel(name="果蔬品种", width = 15)
    @Transient
    private String fgVarietiesName;
    /**果蔬种类*/

    private FgTypeEntity fgTypeEntity;

    /**果蔬品种*/

    private FgVarietiesEntity fgVarietiesEntity;

    /**生产量*/
    @Excel(name="生产量", width = 15 ,type = 4 )
    private java.lang.Float outPus;
    /**主要用途*/
    @Excel(name="主要用途", width = 25,   dicCode="primaryUse")
    private java.lang.String primaryUse;
    /**加工量*/
    @Excel(name="加工量", width = 15 ,type = 4 )
    private java.lang.Float processCapacity;
    /**加工副产量*/
    @Excel(name="加工副产量", width = 15 ,type = 4 )
    private java.lang.Float byProduceProcess;

    /**加工副产物适应性评价*/
    @Excel(name="加工副产物适应性评价", width = 25  )
    private java.lang.String evaluate;

    /**图片*/
    @Excel(name="图片", width =50 ,type=2)
    private java.lang.String fileIds;

    private String userName;

    private Date createTime;

    /**
     *方法: 取得java.lang.String
     *@return: java.lang.String  id
     */

    @Id
    @GeneratedValue(generator = "paymentableGenerator")
    @GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
    @Column(name ="ID",nullable=false,length=36)
    public java.lang.String getId(){
        return this.id;
    }

    /**
     *方法: 设置java.lang.String
     *@param: java.lang.String  id
     */
    public void setId(java.lang.String id){
        this.id = id;
    }
    /**
     *方法: 取得java.util.Date
     *@return: java.util.Date  时间
     */
    @Column(name ="DATA_INFO_TIME",nullable=true)
    public java.util.Date getDataInfoTime(){
        return this.dataInfoTime;
    }

    /**
     *方法: 设置java.util.Date
     *@param: java.util.Date  时间
     */
    public void setDataInfoTime(java.util.Date dataInfoTime){
        this.dataInfoTime = dataInfoTime;
    }
    /**
     *方法: 取得java.lang.String
     *@return: java.lang.String  省
     */
    @Column(name ="PROVINCE_ID",nullable=true,length=36)
    public java.lang.String getProvinceId(){
        return this.provinceId;
    }

    /**
     *方法: 设置java.lang.String
     *@param: java.lang.String  省
     */
    public void setProvinceId(java.lang.String provinceId){
        this.provinceId = provinceId;
    }
    /**
     *方法: 取得java.lang.String
     *@return: java.lang.String  市
     */
    @Column(name ="CITY_ID",nullable=true,length=36)
    public java.lang.String getCityId(){
        return this.cityId;
    }

    /**
     *方法: 设置java.lang.String
     *@param: java.lang.String  市
     */
    public void setCityId(java.lang.String cityId){
        this.cityId = cityId;
    }
    /**
     *方法: 取得java.lang.String
     *@return: java.lang.String  区
     */
    @Column(name ="AREA_ID",nullable=true,length=36)
    public java.lang.String getAreaId(){
        return this.areaId;
    }

    /**
     *方法: 设置java.lang.String
     *@param: java.lang.String  区
     */
    public void setAreaId(java.lang.String areaId){
        this.areaId = areaId;
    }
    /**
     *方法: 取得java.lang.String
     *@return: java.lang.String  果蔬种类
     */

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "FG_TYPE_ID")
    public FgTypeEntity getFgTypeEntity() {
        return fgTypeEntity;
    }

    public void setFgTypeEntity(FgTypeEntity fgTypeEntity) {
        this.fgTypeEntity = fgTypeEntity;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "FG_VARIETIES_ID")
    public FgVarietiesEntity getFgVarietiesEntity() {
        return fgVarietiesEntity;
    }

    public void setFgVarietiesEntity(FgVarietiesEntity fgVarietiesEntity) {
        this.fgVarietiesEntity = fgVarietiesEntity;
    }

    /**
     *方法: 取得java.lang.Float
     *@return: java.lang.Float  生产量
     */
    @Column(name ="OUT_PUS",nullable=true,precision=10,scale=2)
    public java.lang.Float getOutPus(){
        return this.outPus;
    }

    /**
     *方法: 设置java.lang.Float
     *@param: java.lang.Float  生产量
     */
    public void setOutPus(java.lang.Float outPus){
        this.outPus = outPus;
    }
    /**
     *方法: 取得java.lang.String
     *@return: java.lang.String  主要用途
     */
    @Column(name ="PRIMARY_USE",nullable=true,length=1000)
    public java.lang.String getPrimaryUse(){
        return this.primaryUse;
    }

    /**
     *方法: 设置java.lang.String
     *@param: java.lang.String  主要用途
     */
    public void setPrimaryUse(java.lang.String primaryUse){
        this.primaryUse = primaryUse;
    }
    /**
     *方法: 取得java.lang.Float
     *@return: java.lang.Float  加工量
     */
    @Column(name ="PROCESS_CAPACITY",nullable=true,precision=10,scale=2)
    public java.lang.Float getProcessCapacity(){
        return this.processCapacity;
    }

    /**
     *方法: 设置java.lang.Float
     *@param: java.lang.Float  加工量
     */
    public void setProcessCapacity(java.lang.Float processCapacity){
        this.processCapacity = processCapacity;
    }
    /**
     *方法: 取得java.lang.Float
     *@return: java.lang.Float  加工副产量
     */
    @Column(name ="BY_PRODUCE_PROCESS",nullable=true,precision=10,scale=2)
    public java.lang.Float getByProduceProcess(){
        return this.byProduceProcess;
    }

    /**
     *方法: 设置java.lang.Float
     *@param: java.lang.Float  加工副产量
     */
    public void setByProduceProcess(java.lang.Float byProduceProcess){
        this.byProduceProcess = byProduceProcess;
    }
    /**
     *方法: 取得java.lang.String
     *@return: java.lang.String  加工副产物适应性评价
     */
    @Column(name ="EVALUATE",nullable=true,length=2000)
    public java.lang.String getEvaluate(){
        return this.evaluate;
    }

    /**
     *方法: 设置java.lang.String
     *@param: java.lang.String  加工副产物适应性评价
     */
    public void setEvaluate(java.lang.String evaluate){
        this.evaluate = evaluate;
    }
    /**
     *方法: 取得java.lang.String
     *@return: java.lang.String  图片
     */
    @Column(name ="FILE_IDS",nullable=true,length=2000)
    public java.lang.String getFileIds(){
        return this.fileIds;
    }

    /**
     *方法: 设置java.lang.String
     *@param: java.lang.String  图片
     */
    public void setFileIds(java.lang.String fileIds){
        this.fileIds = fileIds;
    }
    @Transient
    public String getFgTypeName() {
        if(fgTypeName == null&&fgTypeEntity!=null){
            return this.fgTypeEntity.getName();
        }
        return fgTypeName;
    }

    public void setFgTypeName(String fgTypeName) {
        this.fgTypeName = fgTypeName;
    }
    @Transient
    public String getFgVarietiesName() {
        if(fgVarietiesName == null&&fgVarietiesEntity!=null){
            return this.fgVarietiesEntity.getName();
        }
        return fgVarietiesName;
    }

    public void setFgVarietiesName(String fgVarietiesName) {
        this.fgVarietiesName = fgVarietiesName;
    }
    @Column(name ="user_name",nullable=true)
    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
    @Column(name ="create_time",nullable=true)
    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}

原文地址:https://www.cnblogs.com/qingmiaokeji/p/10988921.html

时间: 2024-10-28 11:41:00

poi 生成word 表格,并向表格单元格中插入多个图片的相关文章

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

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

Java利用poi生成word(包含插入图片,动态表格,行合并)

转: Java利用poi生成word(包含插入图片,动态表格,行合并) 2018年12月20日 09:06:51 wjw_11093010 阅读数:70 Java利用poi生成word(包含插入图片,动态表格,行合并) 测试模板样式: Word生成结果: 图表 2需要的jar包:(具体jar可自行去maven下载) 注意:需要严格按照上面版本下载jar包,否则可能出现jar包之间不能匹配的导致代码报错 各种 jar包都可以在这里下载: https://mvnrepository.com/ Tes

Rdlc技巧,rdlc报表中获取文本框或某个表格单元格中的内容

在RDLC报表中,随意摆放的控件,排列看起来很整齐,但是生成WEB后看就不是很友好了,导出PDF可能又是一个样, 解决这个办法就是把这些摆放在一个容器内,比如Table 内 用ReportItems这个属性来取value值.细节如下 =ReportItems!textbox1.Value + ReportItems!textbox12.Value 注意,页头页脚可以取Body里的值,但是Body里不可以取页头与页脚的值 Rdlc技巧,rdlc报表中获取文本框或某个表格单元格中的内容

[Xcode10 实际操作]五、使用表格-(8)自定义UITableView单元格Accessory样式(附件图标)

本文将演示如何自定义单元格的附件图标. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] 1 import UIKit 2 3 //首先添加两个协议. 4 //一个是表格视图的代理协议UITableViewDelegate 5 //另一个是表格视图的数据源协议UITableViewDataSource 6 class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSou

jquery实现的统计table表格指定列的单元格值的和

jquery实现的统计t]able表格指定列的单元格值的和:在一些应用中,表格单元格中存放的都是数字,比如学生的分数,那么就有可能将这些分数做加法运算来统计出总分数,下面就通过代码实例介绍一下如何统计某一列单元格中值的和.代码实例: <!DOCTYPE html><html> <head> <meta charset=" utf-8"> <meta name="author" content="http

table表格单元格中的内容如何强制换行

table表格单元格中的内容如何强制换行:有时候表格单元格中的内容不会换行,那么这个就会严重影响到用户体验,下面就简单介绍一下如何实现单元格中的内容换行.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.51texiao.cn/" />

Swift - 可编辑表格样例(可直接编辑单元格中内容、移动删除单元格)

(本文代码已升级至Swift3) 本文演示如何制作一个可以编辑单元格内容的表格(UITableView). 1,效果图 (1)默认状态下,表格不可编辑,当点击单元格的时候会弹出提示框显示选中的内容.           (2)点击导航栏右侧编辑按钮,表格进入可以编辑状态 (3)这时我们可以删除表格项. (4)也可以拖动调整单元格的顺序. (5)然后就是本文的重点,在编辑状态下.直接点击单元格,即可在当前页面下直接编辑修改单元格中的内容. 2,单元格编辑功能讲解 (1)通过自定义 UITableV

[Xcode10 实际操作]五、使用表格-(3)设置UITableView单元格图标

本文将演示如何给表格行设置图标. 打开资源文件夹[Assets.xcassets], 在资源文件夹中导入两张图片:一张彩色,一张灰色,作为单元格的图标. [+]->[Import]->[Open] 在项目导航区,打开视图控制器的代码文件[ViewController.swift] 1 import UIKit 2 3 //首先添加两个协议. 4 //一个是表格视图的代理协议UITableViewDelegate 5 //另一个是表格视图的数据源协议UITableViewDataSource 6

如何用Apache POI操作Excel文件-----如何对一个单元格加注解?

有的时候,我们需要通过操作Apache POI,在生成Cell数据的同时,能对其生成的Cell,加上注解(comments),类似于下面的. 那么对于这种情况,我们的代码应该如何写呢? 借花献佛,我就用Apache POI官方提供的例子,然后加上一些注解,给大家看一下.本例子的测试代码是基于POI-3.12的. 执行完后,将会生成上图所示的Excel工作表单(sheet) [java] view plain copy import org.apache.poi.ss.usermodel.*; i