Java导出word⽂档,遍历表格数据,导出图⽚
1.引⼊maven依赖:
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>3.3.0</version>
</dependency>
<!--注意:word中要使⽤循环等标签必须单独导⼊以下依赖-->
<dependency>什么样的职业最危险
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>1.1</version>
</dependency>
2.word模板内容
3.参数说明:$fe:jobs(jobs:java代码中集合名称),t.属性名(t表⽰集合中单个对象)
EasyPoi 模板 表达式⽀持
空格分割
三⽬运算 {{test ? obj:obj2}}
n: 表⽰ 这个cell是数值类型 {{n:}}
le: 代表长度{{le:()}} 在if/else 运⽤{{le:() > 8 ? obj1 : obj2}}
fd: 格式化时间 {{fd:(obj;yyyy-MM-dd)}}
fn: 格式化数字 {{fn:(obj;###.00)}}
fe: 遍历数据,创建row
!fe: 遍历数据不创建row
$fe: 下移插⼊,把当前⾏,下⾯的⾏全部下移.size()⾏,然后插⼊
!if: 删除当前列 {{!if:(test)}}
单引号表⽰常量值 ‘’ ⽐如’1’ 那么输出的就是 1
&NULL& 控制
竹林七贤是谁]] 换⾏符
4.⼯具类
package;
import WordExportUtil;
import XWPFDocument;
import ByteArrayOutputStream;
import File;
import Map;
public class WordUtil {
/**
* 导出word(2007版本docx)
*
* @param templateWordPath
* @param dataMap
* @return
* @throws Exception
*/
public static byte[]exportWord(String templateWordPath, Map<String, Object> dataMap)throws Exception { File tf =new File(templateWordPath);
if(!tf.exists()||!tf.isFile()){
throw new RuntimeException("File ["+ templateWordPath +"] Not Found Or Not File.");
}
XWPFDocument document = portWord07(templateWordPath, dataMap);
ByteArrayOutputStream bos =new ByteArrayOutputStream();
document.write(bos);
ByteArray();
}
}
5.控制层
package;长津湖票房估计破不了10亿
import WordImageEntity;
import WordUtil;
import Controller;
import RequestMapping;江苏高考满分作文
import HttpServletResponse;
import OutputStream;
import ArrayList;
import HashMap;
早安最美图片import List;
import Map;
@Controller
public class TestController {
@RequestMapping(value ="/export")
public void export(HttpServletResponse response){
try{
//
Map<String, Object> dataMap =new HashMap<>();//导出单个数据 dataMap.put("title","我是导出⽂档的标题");//导出对象
Map<String, String> user =new HashMap<>();
user.put("name","姓名");
user.put("age","443");
user.put("address","地址");
user.put("other","我不知道");
dataMap.put("user", user);
//导出图⽚
WordImageEntity image =new WordImageEntity();
//设置图⽚尺⼨
image.setHeight(500);
image.setWidth(500);
//图⽚地址,需要是本地项⽬中图⽚,如果是第三⽅的需要把图⽚先下载下来
image.setUrl("C:\\Users\\Fr\\Pictures\\11163144hqk4.JPG");
image.setType(WordImageEntity.URL);
dataMap.put("images", image);
List<Map<String, Object>> jobs =new ArrayList<>();
//导出列表
Map<String, Object> job;
for(int i =0; i <5; i++){
job =new HashMap<>();
job.put("id","ID-"+ i);
job.put("name","姓名:"+ i);
jobs.add(job);
word打开是乱码}
dataMap.put("jobs", jobs);
// “D:/word-template-test.docx”是word模板所在位置
byte[] doc = portWord("D:/word-template-test.docx", dataMap);
response.setContentType("application/vnd.ms-word;charset=utf-8");
response.setHeader("Content-Disposition",
"attachment;filename=\""+new String("word⽂档导出".getBytes("gb2312"),"ISO8859-1")+".docx");//⽂件名中⽂需进⾏格式转换,不然可能出现乱码
OutputStream out = OutputStream();
out.write(doc);
out.flush();
}catch(Exception e){
e.printStackTrace();
}
}
}
5.导出效果
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论