使用POI根据传入的标题、数据、数据格式等生产简单的excel文件,有例子和注解,有兴趣的朋友可以看下:
import com.google.common.collect.Lists;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* 简单excel生成工具(使用POI),配合@PoiExcelFiled注解使用
*
* 返回HSSFSheet可以在此基础上新增sheet、获取sheet字节数组
*
*
* @author hzhqk
* @date 2018/03/21
*/
@Slf4j
public class ExcelUtil {
/**
* 默认sheet名称
*/
private static final String DEFAULT_SHEET_NAME = "sheet";
/**
* 单个Sheet页最大行数(除去标题)
*/
private static final int SINGLE_SHEET_MAX_ROWS = 65535;
/**
* 默认单元格宽度
*/
private static final int DEFAULT_CELL_WIDTH = 5000;
/**
* 默认日期格式
*/
private static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss";
/**
* 根据列标题和列数据生成excel表格文件
* excel默认一个sheet且sheet名称默认为sheet1
*
* 获取excel bytes示例:
* ByteArrayOutputStream os = new ByteArrayOutputStream();
* workbook.write(os);
* 或直接使用 PoiExcelUtil.getExcelBytes(hssfWorkbook);
*
*
* @param datas
* @return 没有使用write方法时要手动关闭HSSFWorkbook
* @throws Exception
*/
public static HSSFWorkbook createExcel(List> datas) throws Exception {
return createExcelWithSheetName(null, datas);
}
/**
* 根据列标题和列数据生成excel表格文件,excel文件默认一个sheet
*
* @param sheetName 生成的excel文件的sheet名,分页时会在后面加序号
* @param datas 列数据
* @return 文件byte
* @throws Exception
*/
public static HSSFWorkbook createExcelWithSheetName(String sheetName, List> datas) throws Exception {
HSSFWorkbook workbook = ne