JAVA导出EXCEL表格
工作时遇到了一个excel 导出的问题 , 原本是想直接用前端的table直接做excel 导出,但是又发现有点不满足需求
是 同是将三个小表格放入到一个excel表格中去,于是就上网找资料
这篇贴子就写的比较清楚详细 于是快乐的抄袭就开始了,但是发现一些不足之处,于是就稍微改动了一下,觉得还是满足使用的
#贴上代码
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import java.io.*;
import java.util.*;
public class ExcelUtil {
static HSSFCellStyle style;
/**
* 导出Excel
*
* @param sheetName sheet名称
* @param title 标题
* @param values 内容
* @param wb HSSFWorkbook对象
* @return
*/
public static HSSFWorkbook getHSSFWorkbook(String sheetName, String[] title, List<Map<String, Object>> values, HSSFWorkbook wb) {
// 第一步,创建一个HSSFWorkbook
if (wb == null) {
wb = new HSSFWorkbook();
style = getStyle(wb);
/*创建一个sheet*/
HSSFSheet sheet = wb.createSheet(sheetName);
/*设置标题*/
setTitle(sheet, title);
/*将map里的数据设置到sheet 中去*/
setData(sheet, values);
} else {
style = getStyle(wb);
HSSFSheet sheet = wb.getSheet(sheetName);
setTitle(sheet, title);
setData(sheet, values);
}
return wb;
}
private static void setTitle(HSSFSheet sheet, String[] title) {
int lastRowNum = sheet.getLastRowNum();
/*获取 最后一行的行号*/
HSSFRow row = sheet.createRow(lastRowNum + 1);
for (int i = 0; i < title.length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellValue(title[i]);
cell.setCellStyle(style);
}
}
/**
* 构建样式
*
* @param wb
* @return
*/
private static HSSFCellStyle getStyle(HSSFWorkbook wb) {
HSSFCellStyle style = wb.createCellStyle();
// 创建一个居中格式
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
return style;
}
/**
* 填充数据的方法
*
* @param sheet
* @param mapList
*/
private static void setData(HSSFSheet sheet, List<Map<String, Object>> mapList) {
int i = sheet.getLastRowNum();
for (Map<String, Object> value : mapList) {
HSSFRow row = sheet.createRow(i + 1);
int j = 0;
for (Map.Entry<String, Object> entry : value.entrySet()) {
//将内容按顺序赋给对应的列对象
row.createCell(j).setCellValue((String) entry.getValue());
j++;
}
i++;
}
}
public static void main(String[] args) {
String sheetName = "学生信息表";//Sheet名称
/*说明: 如果是用map的话 必须使用linkHashMap 这样的数据才是有序的,否则就是无序的*/
Map<String, Object> map = new LinkedHashMap<>();
List<Map<String, Object>> mapList = new ArrayList<>();
map.put("name", "小明");
map.put("sex", "男");
map.put("age", "10");
map.put("class", "广东小学");
map.put("school", "三年二班");
mapList.add(map);
String[] title = {"名称", "性别", "年龄", "学校", "班级"};
//excel文件名
String fileName = "D://学生信息表" + System.currentTimeMillis() + ".xls";
//第一次加载数据
HSSFWorkbook workbook = getHSSFWorkbook(sheetName, title, mapList, null);
//同一个sheet 中添加其他信息
Map<String, Object> map1 = new LinkedHashMap<>();
List<Map<String, Object>> mapList1 = new ArrayList<>();
map1.put("hight", "165cm");
map1.put("weight", "80kg");
map1.put("like", "打篮球");
mapList1.add(map1);
String[] titles = {"身高", "体重", "爱好"};
workbook = getHSSFWorkbook(sheetName, titles, mapList1, workbook);
OutputStream os = null;
try {
os = new FileOutputStream(new File(fileName));
workbook.write(os);
os.flush();
os.close();
System.out.println("successful");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
#测试结果是
刚刚好满足我的要求
未完待续...