需求如标题,项目需要把单个查询到接口数据导出一个Excel文件,因为字段比较多,列出来的话比较工作量比较大,就写了一个导出功能,遍历属性值导出。
示例如下:
1、导入poi依赖
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--poi start-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.15</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.15</version>
</dependency>
<!--poi end-->
2、代码如下:
package com.bypay.server.test;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.poi.xssf.usermodel.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.*;
/**
* 将List<Map<String,Object>> 类型数据导出到Excel文件
*/
public class DataToExcel {
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class Student {
String name;
int age;
String sex;
}
/**
* src:定义下载的文件路径
*
* @param mapArrayList
* @param src
*/
public static void createExcel(List<Map<String, Object>> mapArrayList, String src) {
System.out.println("数据转成Excel...");
//获取数据源的 key, 用于获取列数及设置标题
Map<String, Object> map = mapArrayList.get(0);
Set<String> stringSet = map.keySet();
ArrayList<String> headList = new ArrayList<>(stringSet);
// 定义一个新的工作簿
XSSFWorkbook wb = new XSSFWorkbook();
// 创建一个Sheet页
XSSFSheet sheet = wb.createSheet("First sheet");
//设置行高
sheet.setDefaultRowHeight((short) (2 * 256));
//设置列宽
sheet.setColumnWidth(0, 4000);
sheet.setColumnWidth(1, 4000);
sheet.setColumnWidth(2, 4000);
XSSFFont font = wb.createFont();
font.setFontName("宋体");
font.setFontHeightInPoints((short) 16);
//获得表格第一行
XSSFRow row = sheet.createRow(0);
//chen 优化标题获取 根据数据源信息给第一行每一列设置标题
for (int i = 0; i < headList.size(); i++) {
XSSFCell cell = row.createCell(i);
cell.setCellValue(headList.get(i));
}
XSSFRow rows;
XSSFCell cells;
//循环拿到的数据给所有行每一列设置对应的值
for (int i = 0; i < mapArrayList.size(); i++) {
// 在这个sheet页里创建一行
rows = sheet.createRow(i + 1);
//chen 优化值获取 给该行数据赋值
for (int j = 0; j < headList.size(); j++) {
String value;
if (mapArrayList.get(i).get(headList.get(j)) != null) {
value = mapArrayList.get(i).get(headList.get(j)).toString();
} else {
value = "";
}
cells = rows.createCell(j);
cells.setCellValue(value);
}
}
try {
File file = new File(src);
FileOutputStream fileOutputStream = new FileOutputStream(file);
wb.write(fileOutputStream);
wb.close();
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
System.out.println("数据加载...");
List<Map<String,Object>> list = new ArrayList<>();
Map<String,Object> map = new HashMap<>();
map.put("名称","iphone13");
map.put("属性1",1);
map.put("属性2",2);
map.put("属性3",3);
Map<String,Object> map1 = new HashMap<>();
map1.put("名称","iphone12");
map1.put("属性1",1);
map1.put("属性2",2);
map1.put("属性3",3);
Map<String,Object> map2 = new HashMap<>();
map2.put("名称","iphone11");
map2.put("属性1",1);
map2.put("属性3",3);
list.add(map);
list.add(map1);
list.add(map2);
createExcel(list,"d:/dddd.xls");
}
}