小伙伴们切记不要动exportExcel和export,封装好了,直接copy调用
只需要改动exportSoExcelData方法里面的(没有条件查询的小伙伴可以不需要第2步)
1、表头(header1)
2、实体类(SoilarcelsDto )我这个是条件查询、不需要条件查询的可以不带实体类
3、去数据库查询数据,查询回来的数据放到list集合里面
4、然后调用exportExcel方法往表格里写入数据
5、最后调用export方法下载Excel
@Override
public void exportSoExcelData(HttpServletResponse response, SoiDto soiDto) {
List<List<Object>> data1 = new ArrayList<List<Object>>();
XSSFWorkbook workbook = new XSSFWorkbook();
String[] header1={"省","市","区县","经度","维度"};
List<Soils> soilList = soiMapper.findSoil(soiDto);
for(Soils s : soilList){
List<Object> list = new ArrayList<>();
list.add(s.getProvince());
list.add(s.getCity());
list.add(s.getDistrictCounty());
list.add(s.getLongitude());
list.add(s.getLatitude());
data1.add(list);
}
}
exportExcel(workbook, 0, "信息", header1, data1);
//原理就是将所有的数据一起写入,然后再关闭输入流。
export(response, workbook, "信息");
}
/**
* 导出多个sheet,不具有合并单元格
* @param workbook
* @param sheetNum (sheet的位置,0表示第一个表格中的第一个sheet)
* @param sheetTitle (sheet的名称)
* @param headers (表格的标题)
* @param result (表格的数据)
* @throws Exception
* @Title: exportExcel
* @Description: 导出Excel的方法
*/
public static void exportExcel(XSSFWorkbook workbook, int sheetNum, String sheetTitle, String[] headers, List<List<Object>> result) {
try {
// 第一步,创建一个webbook,对应一个Excel以xsl为扩展名文件
XSSFSheet sheet = workbook.createSheet();
workbook.setSheetName(sheetNum, sheetTitle);
//设置列宽度大小
sheet.setDefaultColumnWidth((short) 30);
//第二步, 生成表格第一行的样式和字体
XSSFCellStyle style = workbook.createCellStyle();
// 设置这些样式
style.setFillForegroundColor(HSSFColor.PALE_BLUE.index);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 生成一个字体
XSSFFont font = workbook.createFont();
font.setColor(HSSFColor.BLACK.index);
//设置字体所在的行高度
font.setFontHeightInPoints((short) 10);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// 把字体应用到当前的样式
style.setFont(font);
// 指定当单元格内容显示不下时自动换行
style.setWrapText(true);
// 产生表格标题行
XSSFRow row = sheet.createRow(0);
for (int i = 0; i < headers.length; i++) {
XSSFCell cell = row.createCell((short) i);
cell.setCellStyle(style);
XSSFRichTextString text = new XSSFRichTextString(headers[i]);
cell.setCellValue(text.toString());
}
// 第三步:遍历集合数据,产生数据行,开始插入数据
if (result != null) {
int index = 1;
for (List<Object> m : result) {
row = sheet.createRow(index);
int cellIndex = 0;
for (Object str : m) {
XSSFCell cell = row.createCell((int) cellIndex);
if (Objects.isNull(str)){
cell.setCellValue(StringUtils.EMPTY);
}else {
cell.setCellValue(str + "");
}
cellIndex++;
}
index++;
}
}
}catch (Exception e) {
e.printStackTrace();
}
}
/**
* 配合 exportExcel使用,用于下载excel
* @param response
* @param wb
* @param excelName
*/
public static void export(HttpServletResponse response, Workbook wb, String excelName){
// 解决响应中文文件名乱码问题
String fileName = "";
try {
fileName = new String((excelName).getBytes("gbk"), "iso-8859-1");
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
// fileName += DateUtil.format(new Date(), DateUtil.YYYYMMDDHHMMSS) + ".xls";
fileName += DateUtil.format(new Date(), DateUtil.YYYYMMDDHHMMSS) + ".xlsx";
// 浏览器响应下载弹框
response.setHeader("Content-Disposition", "attachment;filename=" + fileName );
response.setContentType("application/x-msdownload");
// response.setHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes("utf-8"),"iso8859-1"));
// response.setContentType("application/ynd.ms-excel;charset=UTF-8");
OutputStream out=response.getOutputStream();
wb.write(out);
out.flush();
out.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}