搞了一个多月的财务制证需求, 总算是上UAT了, 然后是有些存量数据需要处理, 根据需求将对应存量数据以Excel形式导出, 提供给配合联调的其它系统做下一步处理; 处理思路是写个定时任务, 查询对应存量数据, 以约定好的Excel格式导出至指定位置;
这里将Excel导出的处理简单整理下:
/**
* 导出报表Excel
* @param list 主数据
*/
public void doDataExport(List<Map<String, Object>> list) {
//创建一HSSFWorkbook对象, 对应一个Excel文件
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = null;
String[] title = null;
String[][] str = null;
String fileName = "导出报表测试";//自定义导出文件名
sheet = wb.createSheet("学生信息");
title = createTitle();//创建表头
str = createContent(list);//创建表内容
HSSFRow row = sheet.createRow(0);
HSSFCell cell = null;
//创建表头
for (int i = 0; i < title.length; i++) {
cell = row.createCell(i);
cell.setCellValue(title[i]);
//cell.setCellStyle(style);
}
//创建表内容
for (int i = 0; i < list.size(); i++) {
row = sheet.createRow(i + 1);
for (int j = 0; j < title.length; j++) {
row.createCell(j).setCellValue(str[i][j]);
}
}
//导出到指定位置
try {
String filePath = "C:/Users/admin/Desktop/test";
filePath += "/" + fileName + ".xls";
isFilePathExist(filePath);
FileOutputStream fos = new FileOutputStream(filePath);
wb.write(fos);
fos.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
//创建表头
public String[] createTitle(){
String[] title = new String[3];
title[0] = "ID";
title[1] = "NAME";
title[2] = "AGE";
return title;
}
//创建表内容
public String[][] createContent(List<Map<String, Object>> list){
String[][] content = new String[list.size()][3];
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
content[i][0] = (String) list.get(i).get("id");
content[i][1] = (String) list.get(i).get("name");
content[i][2] = (String) list.get(i).get("age");
}
return content;
}
//文件位置校验
public void isFilePathExist(String filePath) {
File file = new File(filePath);
if(!file.exists()){
file.mkdirs();
}
}
PS: 操作之前需要用到一个核心jar包 - poi
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi 20190602-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.0</version>
</dependency>
最后简单测试下:
public static void main(String[] args) {
DataExportTest test = new DataExportTest();
List<Map<String, Object>> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
Map<String, Object> map = new HashMap<>();
map.put("id", "0" + i);
map.put("name", "小明" + i);
map.put("age", "9");
list.add(map);
}
test.doDataExport(list);
}
测试结果: Excel出现在指定位置, 且数据OK即可