直接上代码啊。
1 参数实体
import lombok.Data;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@Data
public class DownParam {
private String filename;//下载的文件名称
private HttpServletResponse response;//response
private List<ExcelModel> sheets;//sheet页的集合
}
2 sheet页实体
import lombok.Data;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@Data
public class ExcelModel {
private String sheetname;//sheet页名称
private String topHead;//属性-列头 第一行
//属性-列头 第二行 用LinkedHashMap保证有序 其中key对应bdList数据中的键,
//若Object为实体对象,则key为字段名
private Map<String, String> headMap;
private List<Object> bdList;//数据
}
3 下载的util类
import net.sf.json.JSONObject;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.streaming.SXSSFCell;
import org.apache.poi.xssf.streaming.SXSSFRow;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class DownUtil {
public static int DEFAULT_COLOUMN_WIDTH=17;
/**
* 下载文件
* @param downParam
*/
public static void downloadExcelFile(DownParam downParam){
try {
SXSSFWorkbook workbook=new SXSSFWorkbook(100);//创建文件
CellStyle topStyle = gettopStyle(workbook);//第一行标头的样式
CellStyle headerStyle = getHeaderStyle(workbook);//第二行标题的样式
CellStyle cellStyle = getcellStyle(workbook);//数据样式
List<ExcelModel> sheets = downParam.getSheets();
for(ExcelModel excelModel:sheets){//循环生成多个sheet页
SXSSFSheet sheet=workbook.createSheet(excelModel.getSheetname()); // 生成一个(带标题)sheet页
i