赞
踩
导出效果

1.pom文件
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.0.M2</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.2</version> </dependency> <!-- https://mvnrepository.com/artifact/xerces/xercesImpl --> <dependency> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> <version>2.9.1</version> </dependency>
对应数据实体类
@Data
public class QuestionnaireStatisticsVo {
private String type;
private String title;
private List<OptionsList> options;
@Data
public class OptionsList {
private String name;
private BigDecimal currentNum;
private Integer sum;
}
}
对应的测试
package com.hs.cn.text;
import cn.hutool.poi.word.TableUtil;
import cn.hutool.poi.word.Word07Writer;
import com.hs.cn.scheduledtask.vo.QuestionnaireStatisticsVo;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.xwpf.usermodel.;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.;
import java.awt.;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.;
import java.util.List;
public class WordText {
public static void main(String[] args) throws IOException, InvalidFormatException {
QuestionnaireStatisticsVo vo = new QuestionnaireStatisticsVo(); vo.setTitle("您目前或者曾经是否有以下的明确诊断的疾病?"); vo.setType("1"); java.util.List<QuestionnaireStatisticsVo.OptionsList> optionsListList = new ArrayList<>(); QuestionnaireStatisticsVo.OptionsList optionsList = vo.new OptionsList(); optionsList.setName("高血压"); optionsList.setSum(6); optionsList.setCurrentNum(BigDecimal.valueOf(40)); QuestionnaireStatisticsVo.OptionsList optionsList2 = vo.new OptionsList(); optionsList2.setName("糖尿病"); optionsList2.setSum(6); optionsList2.setCurrentNum(BigDecimal.valueOf(40)); QuestionnaireStatisticsVo.OptionsList optionsList3 = vo.new OptionsList(); optionsList3.setName("冠心病"); optionsList3.setSum(6); optionsList3.setCurrentNum(BigDecimal.valueOf(20)); QuestionnaireStatisticsVo.OptionsList optionsList4 = vo.new OptionsList(); optionsList4.setName("脑卒中"); optionsList4.setSum(6); optionsList4.setCurrentNum(BigDecimal.valueOf(0)); QuestionnaireStatisticsVo.OptionsList optionsList5 = vo.new OptionsList(); optionsList5.setName("高脂血症"); optionsList5.setSum(6); optionsList5.setCurrentNum(BigDecimal.valueOf(0)); QuestionnaireStatisticsVo.OptionsList optionsList6 = vo.new OptionsList(); optionsList6.setName("肥胖"); optionsList6.setSum(6); optionsList6.setCurrentNum(BigDecimal.valueOf(0)); optionsListList.add(optionsList); optionsListList.add(optionsList2); optionsListList.add(optionsList3); optionsListList.add(optionsList4); optionsListList.add(optionsList5); optionsListList.add(optionsList6); vo.setOptions(optionsListList); QuestionnaireStatisticsVo vo1 = new QuestionnaireStatisticsVo(); vo1.setTitle("您的直系亲属,目前或曾经是否有以下病史?"); vo1.setType("2"); java.util.List<QuestionnaireStatisticsVo.OptionsList> optionsListList1 = new ArrayList<>(); QuestionnaireStatisticsVo.OptionsList options = vo1.new OptionsList(); options.setName("高血压"); options.setSum(6); options.setCurrentNum(BigDecimal.valueOf(40)); QuestionnaireStatisticsVo.OptionsList options2 = vo1.new OptionsList(); options2.setName("糖尿病"); options2.setSum(6); options2.setCurrentNum(BigDecimal.valueOf(40)); QuestionnaireStatisticsVo.OptionsList options3 = vo1.new OptionsList(); options3.setName("冠心病"); options3.setSum(6); options3.setCurrentNum(BigDecimal.valueOf(20)); QuestionnaireStatisticsVo.OptionsList options4 = vo1.new OptionsList(); options4.setName("脑卒中"); options4.setSum(6); options4.setCurrentNum(BigDecimal.valueOf(0)); optionsListList1.add(options); optionsListList1.add(options2); optionsListList1.add(options3); optionsListList1.add(options4); vo1.setOptions(optionsListList1); java.util.List<QuestionnaireStatisticsVo> implExcelList = new ArrayList<>(); implExcelList.add(vo); implExcelList.add(vo1); /* * 行间距没有找到怎么设置的,用的换行???? * */ Word07Writer writer = new Word07Writer(); // 添加段落(标题)居中 writer.addText(ParagraphAlignment.CENTER,new Font("方正小标宋简体", Font.PLAIN, 15), "阶段性总检问卷"); for (int i = 0; i < implExcelList.size(); i++) { writer.addText(new Font("宋体", Font.PLAIN, 10), i + 1 + "." + implExcelList.get(i).getTitle() +"("+("1".equals(implExcelList.get(i).getType())?"单选题":"2".equals(implExcelList.get(i).getType())?"多选题":"填空题")+")"); writer.addText(new Font("宋体", Font.PLAIN, 8), ""); List<QuestionnaireStatisticsVo.OptionsList> voOptions = implExcelList.get(i).getOptions(); List<Map<String, Object>> tableMap = new ArrayList<>(); for (QuestionnaireStatisticsVo.OptionsList voOption : voOptions) { Map<String, Object> map = new HashMap<>(); map.put("选项", voOption.getName()); map.put("小计", voOption.getSum()); map.put("比例", voOption.getCurrentNum()+"%"); tableMap.add(map); } TableUtil.createTable(writer.getDoc(), tableMap); writer.addText(new Font("宋体", Font.PLAIN, 8), ""); } XWPFDocument doc = writer.getDoc(); List<XWPFTable> tables = doc.getTables();//所有表格 for (int a = 0; a < tables.size(); a++) { CTTblPr tblPr = tables.get(a).getCTTbl().getTblPr(); tblPr.getTblW().setType(STTblWidth.DXA); tblPr.getTblW().setW(new BigInteger("7000")); List<XWPFTableRow> rows = tables.get(a).getRows();//表格行属性 for (int i = 0; i < rows.size(); i++) { XWPFTableRow xwpfTableRow = rows.get(i); xwpfTableRow.setHeight(400); List<XWPFTableCell> tableCells = xwpfTableRow.getTableCells();//单元格 for (int b = 0; b < tableCells.size(); b++) { if(b==1 || b==2){ CTTc ctTc = tableCells.get(b).getCTTc(); CTTblWidth cellWidth = ctTc.addNewTcPr().addNewTcW(); cellWidth.setW(BigInteger.valueOf(1000)); CTTcPr pr = ctTc.addNewTcPr(); pr.addNewVAlign().setVal(STVerticalJc.CENTER); ctTc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER); } if(i==0){ XWPFParagraph paragraphArray = tableCells.get(b).getParagraphArray(0); List<XWPFRun> runs = paragraphArray.getRuns(); for (int j = 0; j < rows.size(); j++) { runs.get(i).setFontSize(15); runs.get(i).setBold(true); if(j==1 || j==2){ runs.get(i).setVerticalAlignment("center"); } } } } } } // 写出到文件 OutputStream os = new FileOutputStream("C:\\Users\\John\\Desktop\\word测试001.doc"); //写入文件 doc.write(os); doc.close(); // 关闭 writer.close(); }
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。