1、步骤:创建HSSFWorkbook类,然后创建HSSFSheet表单类,再创建HSSFRow行和HSSFCell列
2、示例:
//参数解释:dataList 需要导出的数据类;colMapping 定义的列明,下面有示例;wb HSSFWorkbook 工具类;sheetName 表单名称
public void writeDataToHSSFWorkbook(List<T> dataList, Map<String, String> colMapping, HSSFWorkbook wb, String sheetName) {
//1.创建HSSFSheet
HSSFSheet sheet1 = wb.createSheet(sheetName);
//2.创建HSSFRow
HSSFRow row = sheet1.createRow(0);
int i=0;
//3.将预定义的colMapping列名称生成到表单的第一行
for(String colName : colMapping.keySet()){
HSSFCell cell = row.createCell(i++);
cell.setCellValue(colName);
}
//4.从第二行开始,将数据类生成到表单,一条数据生成一行
int rowNum = 1;
for(Object data:dataList){
row = sheet1.createRow(rowNum++);
Map<String,String> dataMap;
try {
//5.使用apache.commons.beanutils工具将数据类属性转换为map类型
dataMap = BeanUtils.describe(data);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
throw new ServiceException("生成Excel文件时出现错误",e);
}
i=0;
//6.数据类中的属性生成到对应列
for(Map.Entry<String,String> col:colMapping.entrySet()){
String value ="";
if(StringUtils.isNotEmpty(col.getValue())){
value = dataMap.get(col.getValue());
}
HSSFCell cell = row.createCell(i++);
cell.setCellValue(value);
}
}
for(i=0;i<colMapping.size();i++) {
sheet1.autoSizeColumn(i);
}
}
3、colMapping可以预定义一些列名称
Map<String, String> colMapping = new LinkedHashMap<>();
colMapping.put("显示的列名","对应的数据类的属性名");
colMapping.put("国家","country");
colMapping.put("用户名","name");