场景:填入对象列表 转为json数据,再根据json生成excel表格和html表格
package com.example.aop.poi;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.schedulerx.shade.com.google.common.collect.Lists;
import com.google.common.base.Splitter;
import lombok.Data;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.hssf.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
public class Object2Table {
public static void main(String[] args) throws IOException {
// 对象列表,支持泛型,单个对象和list都可以传
List list = Lists.newArrayList();
list.add(new OrderDTO("12345","创建中"));
OrderDTO orderDTO = new OrderDTO("12346", "销毁");
// 不传表格表头名为字段名,字段别名map可以将字段名替换成自定义的名称
HashMap tableHeadDisplayMap = new HashMap();
tableHeadDisplayMap.put("orderCode","单号");
// 建造json对象
TableResultUtil tableResultUtil = new TableResultUtil();
TableResult tableResult=TableResult.builder().tableHead(tableHeadDisplayMap)
.item(orderDTO)
.items(list).build();
String jsonData = tableResultUtil.createTableResult(tableResult);
// 根据对象生成json数据
String toolResult = jsonData;
// 表格头及数据
StringBuffer sBuffer = new StringBuffer();
List tableHead = dealTableHead(toolResult);
dealTableData(toolResult,sBuffer);
// 这里写自己的本地路径
String filePath = "/Users/Desktop/" + System.currentTimeMillis()+".xls";
// 导出成excel
export2(tableHead,sBuffer,filePath);
// 导出成html table
String htmltable = convertTaskResultToHtmlTable(tableHead,sBuffer);
System.out.println(htmltable);
}
private static HSSFWorkbook export2(List tableHeadDisPlayFiels,StringBuffer sBuffer, String filePath) throws IOException {
HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
HSSFSheet hssfSheet = hssfWorkbook.createSheet("result000");
HSSFRow hssfRow = hssfSheet.createRow(0);
HSSFCellStyle hssfCellStyle = hssfWorkbook.createCellStyle();
HSSFDataFormat format = hssfWorkbook.createDataFormat();
hssfCellStyle.setDataFormat(format.getFormat("@"));
//填入表头
int i = 0;
for (String entry : tableHeadDisPlayFiels) {
HSSFCell hssfCell = hssfRow.createCell(i);
hssfCell.setCellValue(entry);
hssfCell.setCellStyle(hssfCellStyle);
i++;
}
//填入表内数据
//第一行是表头,第二行开始填写数据
List resultList = Splitter.on("n").trimResults().omitEmptyStrings().splitToList(sBuffer);
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(resultList)){
for (int j = 0; j < resultList.size(); j++) {
hssfRow = hssfSheet.createRow(j+1);
List fieldList = Splitter.on(",").trimResults().omitEmptyStrings().splitToList(resultList.get(j));
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(fieldList)) {
for (int k = 0; k < fieldList.size(); k++) {
HSSFCell hssfCell = hssfRow.createCell(k);
hssfCell.setCellStyle(hssfCellStyle);
hssfCell.setCellValue(String.valueOf(fieldList.get(k)));
}
}
}
}
FileOutputStream out = new FileOutputStream(filePath);
//保存Excel文件
hssfWorkbook.write(out);
//关闭文件流
out.close();
return hssfWorkbook;
}
public static StringBuffer arrayIdToString(JSONObject jsonobejct,List tableHead,
StringBuffer sBuffer) {
for (String field: tableHead) {
sBuffer.append(jsonobejct.get(field)).append(",");
}
// 这里写全局变量,和框架内容保持对齐
return sBuffer.append("n");
}
public static List dealTableHead(String toolResult) {
JSONObject tableResultJson = JSONObject.parseObject(toolResult);
JSONArray tableHeadDisplayArr = tableResultJson.getJSONArray("tableHeadDisplay");
List tableHeadDisPlayFiels = tableHeadDisplayArr.toJavaList(String.class);
return tableHeadDisPlayFiels;
}
public static void dealTableData(String toolResult, StringBuffer sBuffer){
JSONObject tableResultJson = JSONObject.parseObject(toolResult);
JSONArray tableData = tableResultJson.getJSONArray("tableData");
JSONArray tableHeadArr = tableResultJson.getJSONArray("tableHead");
List tableHeadFiels = tableHeadArr.toJavaList(String.class);
tableData.stream().forEach(jsonobejct -> arrayIdToString((JSONObject) jsonobejct, tableHeadFiels, sBuffer));
}
public static String convertTaskResultToHtmlTable(List tableHeadDisPlayFiels,StringBuffer sBuffer){
StringBuffer sb = new StringBuffer();
sb.append("");
// 获取显示字段名称,并转换成html格式
if (CollectionUtils.isNotEmpty(tableHeadDisPlayFiels)) {
tableHeadDisPlayFiels.forEach(tableHeadFiel -> {
sb.append("| ");
sb.append(tableHeadFiel);
sb.append(" | ");
});
}
sb.append("
");
// 转换值为table格式
List resultList = Splitter.on("n").trimResults().omitEmptyStrings()
.splitToList(sBuffer);
if (CollectionUtils.isNotEmpty(resultList)) {
resultList.forEach(r -> {
sb.append("");
List fieldList = Splitter.on(",").trimResults().omitEmptyStrings().splitToList(r);
if (CollectionUtils.isNotEmpty(fieldList)) {
fieldList.forEach(field -> {
sb.append("| ");
sb.append(field);
sb.append(" | ");
});
}
sb.append("
");
});
}
sb.append("
");
return sb.toString();
}
}
@Data
class OrderDTO {
private String orderCode;
private String status;
public OrderDTO(String orderCode, String status) {
this.orderCode = orderCode;
this.status = status;
}
}
工具类
package com.example.aop.poi;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class TableResult {
private List tableRows;
private Map tableHead;
public List getTableRows() {
return tableRows;
}
public Map getTableHead() {
return tableHead;
}
public TableResult(Map tableHead, List tableRows) {
this.tableHead = tableHead;
this.tableRows = tableRows;
}
@Override
public String toString() {
return "TableResult{" +
"tableRows=" + tableRows +
", tableHead=" + tableHead +
'}';
}
public static TableResult.TableResultBuilder builder() {
return new TableResult.TableResultBuilder();
}
public static class TableResultBuilder {
private List tableRows = new ArrayList<>();
private Map tableHead;
private T item;
private Map tableHeadMap;
TableResultBuilder() {
}
public TableResult.TableResultBuilder item(T t) {
this.tableRows.add(t);
return this;
}
public TableResult.TableResultBuilder items(List items) {
this.tableRows.addAll(items);
return this;
}
public TableResult.TableResultBuilder tableHead(Map tableHeadMap) {
this.tableHead = tableHeadMap;
return this;
}
public TableResult build() {
return new TableResult(this.tableHead, this.tableRows);
}
}
}
结果
html表格验证
excel表格验证