1. Excel工具类:
package com.tymk.backend.wxchart.util;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.List;
public class ExcelUtil {
public static void exportExcel(HttpServletResponse response,
List<List<String>> excelData,
String sheetName,
String fileName,
int columnWidth) throws IOException {
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet(sheetName);
sheet.setDefaultColumnWidth(columnWidth);
int rowIndex = 0;
for(List<String> data : excelData){
HSSFRow row = sheet.createRow(rowIndex++);
for (int i = 0; i < data.size(); i++) {
HSSFCell cell = row.createCell(i);
HSSFRichTextString text = new HSSFRichTextString(data.get(i));
cell.setCellValue(text);
}
}
response.setContentType("multipart/form-data");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
response.setHeader("Content-Disposition", "attachment; filename="+ fileName);
OutputStream os = response.getOutputStream();
workbook.write(os);
os.flush();
os.close();
workbook.close();
}
public static void exportExcel(HttpServletRequest request, HttpServletResponse response,
List<List<String>> excelData, String fileName,
HSSFWorkbook workbook, HSSFSheet sheet) {
int rowIndex = 0;
HSSFCellStyle cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER);
HSSFFont font = workbook.createFont();
font.setFontHeightInPoints((short)10);
font.setFontName("微软雅黑");
cellStyle.setFont(font);
for(List<String> data : excelData){
HSSFRow row = sheet.createRow(rowIndex++);
for (int i = 0; i < data.size(); i++) {
HSSFCell cell = row.createCell(i);
HSSFRichTextString text = new HSSFRichTextString(data.get(i));
cell.setCellValue(text);
cell.setCellStyle(cellStyle);
}
}
try {
String userAgent = request.getHeader("User-Agent");
if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
fileName = URLEncoder.encode(fileName, "UTF-8");
} else {
fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
}
response.setContentType("multipart/form-data");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
response.setHeader("Content-Disposition", "attachment; filename="+ fileName);
OutputStream os = response.getOutputStream();
workbook.write(os);
os.flush();
os.close();
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2. 一般在具体的导出Excel中设置每列的宽度:
private HSSFSheet setSheetFields(HSSFWorkbook workbook){
HSSFSheet sheet = workbook.createSheet("关键字信息表");
sheet.setColumnWidth(0,10*256);
sheet.setColumnWidth(1,13*256);
sheet.setColumnWidth(2,13*256);
sheet.setColumnWidth(3,11*256);
sheet.setColumnWidth(4,23*256);
sheet.setColumnWidth(5,10*256);
sheet.setColumnWidth(6,14*256);
sheet.setColumnWidth(7,40*256);
sheet.setColumnWidth(8,23*256);
sheet.setColumnWidth(9,23*256);
return sheet;
}
3. 一般在Controller接口中定义如下调用上面的方法:
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = setSheetFields(workbook);
ExcelUtil.exportExcel(request,response, dataList,"keyword.xls",workbook,sheet);