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

效果图

  //根据实体对象 ,生成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;
}
}

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

  1. 如何在excel单元格中插入图片批注

    在excel单元格中插入图片批注的方法: 1.选定要插入图片的单元格,然后右键选择插入批注. 2.然后会插入一个批注框,为了不影响图片效果,可以将批注文字都删除.然后鼠标移动到批注框边角再右键. 3. ...

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

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

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

    转(小改): Java利用poi生成word(包含插入图片,动态表格,行合并) 2018年12月20日 09:06:51 wjw_11093010 阅读数:70 Java利用poi生成word(包含插 ...

  4. POI 生成 word 文档 简单版(包括文字、表格、图片、字体样式设置等)

      POI 生成word 文档 一般有两种方法: ① word模板 生成word 文档 : ② 写代码直接生成 word 文档: 我这里演示的是第二种方法,即写代码生成 word文档,不多说废话,直接 ...

  5. 使用POI创建word表格-在表格单元格中创建子表格

    要实现的功能如下:表格中的单元格中有子表格 实现代码如下: XWPFParagraph cellPara = row.getCell(j).getParagraphArray(0); //row.ge ...

  6. 将Word表格中单元格中的文字替换成对应的图片

    示例 原文件结构: 替换后文档结构: 软件截图: 代码: using System;using System.Collections.Generic;using System.ComponentMod ...

  7. POI生成WORD文档

    h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h ...

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

    目录:[Swift]Xcode实际操作 本文将演示如何自定义单元格的附件图标. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit //首先添 ...

  9. EXCEL表格单元格中包含数字英文和汉字,如何自动去掉汉字,保留英文和数字

    EXCEL表格单元格中包含数字英文和汉字,如何自动去掉汉字,保留英文和数字 Function 求数字和字母(对象 As String) '在文本与数字混杂中提取数字和字母   Dim myReg    ...

随机推荐

  1. Spring MVC 数据转换和格式化

    HttpMessageConverter和JSON消息转换器 HttpMessageConverter是定义从HTTP接受请求信息和应答给用户的 HttpMessageConverter是一个比较广的 ...

  2. LeetCode_235. Lowest Common Ancestor of a Binary Search Tree

    235. Lowest Common Ancestor of a Binary Search Tree Easy Given a binary search tree (BST), find the ...

  3. 上传大文件到腾讯云cos遇到的一些问题

    讲一个开发遇到的问题. 开发中遇到一个需求,需要在后台表单页面支持上传视频.因为项目中一直用的是腾讯云的COS做第三方存储平台,所以视频也要上传到cos中保存.首先想到的是使用腾讯提供的php的SDK ...

  4. 个人PC电脑 关闭网卡自启

    前言: 今早我打开我的电脑,惊呆了.出现了以下字样: This Product is covered by one or more of the following patents ... 看了BIO ...

  5. todo---git 生成密钥 原理分析

    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDRJkDZ2z7syFC2QDCaORKF41ecwbL/kyFwkycOVE3MavTRBliAhoAhOaZQTr4j ...

  6. Java中的事务及使用

    什么是事务? 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit).事务通常由高级数据库操纵语言或编程语言(如S ...

  7. Ubuntu的apt命令详解()deepin linux是在Ubuntu基础上开发的

    apt-cache和apt-get是apt包的管理工具,他们根据/etc/apt/sources.list里的软件源地址列表搜索目标软件.并通过维护本地软件包列表来安装和卸载软件. 查看本机是否安装软 ...

  8. 接口缓存--把接口放在redis数据库中,减少访问量

    针对访问量大,且数据较固定的接口,建议建立接口缓存,建立了缓存之后,不会再直接去访问接口了. 比如下面的轮播图接口,每刷新一下首页都会访问一下轮播图接口,所以我们用接口缓存来处理,减少访问量. 视图模 ...

  9. AVR单片机教程——流水灯

    上次我们用 delay 函数与 while 循环实现了一个LED的闪烁.这一次我们把所有LED加入进来,让它们依次闪烁,形成流水灯的效果. 开发板上有4个LED,我们可以用不多的语句把循环体直接描述出 ...

  10. 【Linux】Shell批量修改文件名

    修改文件名,替换中间字符: 例如:ABC_define_EFG.jpg,要把中间的define替换成argument: 用如下脚本即可: for var in *; do mv "$var& ...