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

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

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

效果图

image.png

  //根据实体对象 ,生成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;
  }
}
相关文章
|
3月前
单元格里的内容
单元格里的内容。
29 1
|
7月前
|
Java Apache 索引
POI操作大全(动态合并单元格,为单元格生成一个自定义的数据显示格式,自定义公式计算结果生成,读取excel,word文件在生成图片,word指定位置生成图片)
POI操作大全(动态合并单元格,为单元格生成一个自定义的数据显示格式,自定义公式计算结果生成,读取excel,word文件在生成图片,word指定位置生成图片)
1031 0
|
7月前
POI(excel)中表格(单元格)样式应用实践总结
POI(excel)中表格(单元格)样式应用实践总结
132 0
|
SQL 自然语言处理 搜索推荐
【Word】双栏布局中插入跨栏表格
【Word】双栏布局中插入跨栏表格
785 0
|
数据库
poi 读取word 遍历表格和单元格中的图片
poi 读取word 遍历表格和单元格中的图片
496 0
poi 读取word 遍历表格和单元格中的图片
【Excel自动化办公Part5】:设置行高和列宽、合并单元格、取消合并单元格
【Excel自动化办公Part5】:设置行高和列宽、合并单元格、取消合并单元格
226 0
【Excel自动化办公Part5】:设置行高和列宽、合并单元格、取消合并单元格
|
C#
C# 操作Word文本框——插入表格/读取表格/删除表格
在文本框中,我们可以操作很多元素,如文本、图片、表格等,在本篇文章中将着重介绍如何插入表格到文本框,插入的表格我们可以对表格进行格式化操作来丰富表格内容。此外,对于文本框中的表格内容,我们也可以根据需要来读取表格或者删除表格。
1493 0
html+css实战28-表格标题和表头单元格
html+css实战28-表格标题和表头单元格
156 0
html+css实战28-表格标题和表头单元格
关于 在word中插入表格跨页后每一页表格都显示标题栏 的解决方法
关于 在word中插入表格跨页后每一页表格都显示标题栏 的解决方法
关于 在word中插入表格跨页后每一页表格都显示标题栏 的解决方法