导入依赖
<!-- Excel导入导出插件 -->
<dependency>
<groupId>com.wuwenze</groupId>
<artifactId>ExcelKit</artifactId>
<version>2.0.71</version>
</dependency>
工具类
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.springframework.http.MediaType;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.util.ArrayList;
public class ExcelFileGeneratorUtil {
private final int SPLIT_COUNT = 1000;
private ArrayList fieldName = null;
private ArrayList fieldData = null;
private HSSFWorkbook workBook = null;
public ExcelFileGeneratorUtil(ArrayList fieldName, ArrayList fieldData) {
this.fieldName = fieldName;
this.fieldData = fieldData;
}
public HSSFWorkbook createWorkbook() {
workBook = new HSSFWorkbook();
int rows = fieldData.size();
int sheetNum = 0;
if (rows % SPLIT_COUNT == 0) {
sheetNum = rows / SPLIT_COUNT;
} else {
sheetNum = rows / SPLIT_COUNT + 1;
}
for (int i = 1; i <= sheetNum; i++) {
HSSFSheet sheet = workBook.createSheet("Page " + i);
HSSFRow headRow = sheet.createRow(0);
for (int j = 0; j < fieldName.size(); j++) {
HSSFCell cell = headRow.createCell(j);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
sheet.setColumnWidth(j, 6000);
HSSFCellStyle style = workBook.createCellStyle();
HSSFFont font = workBook.createFont();
short color = HSSFColor.RED.index;
font.setColor(color);
style.setFont(font);
if (fieldName.get(j) != null) {
cell.setCellStyle(style);
cell.setCellValue((String) fieldName.get(j));
} else {
cell.setCellStyle(style);
cell.setCellValue("-");
}
}
for (int k = 0; k < (rows < SPLIT_COUNT ? rows : SPLIT_COUNT); k++) {
if (((i - 1) * SPLIT_COUNT + k) >= rows)
break;
HSSFRow row = sheet.createRow(k + 1);
ArrayList rowList = (ArrayList) fieldData.get((i - 1)
* SPLIT_COUNT + k);
for (int n = 0; n < rowList.size(); n++) {
HSSFCell cell = row.createCell(n);
if (rowList.get(n) != null) {
cell.setCellValue((String) rowList.get(n).toString());
} else {
cell.setCellValue("");
}
}
}
}
return workBook;
}
public void exportExcel(HttpServletResponse response, String fileName) throws Exception {
String encodeFileName = URLEncoder.encode(fileName, "UTF-8");
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setCharacterEncoding("UTF-8");
response.setHeader("content-disposition", "attachment;filename=" + new String(encodeFileName.getBytes(Charset.forName("ISO8859-1"))));
response.setHeader("fileName", fileName);
HSSFWorkbook workbook = createWorkbook();
workbook.write(response.getOutputStream());
}
}
测试类
@Controller
@RequestMapping(value = "/index")
public class VisRecordController {
@Autowired
VisRecordMapper visRecordMapper;
@ResponseBody
@GetMapping("/visList")
public void visList(HttpServletResponse response){
try {
List<VisRecordDTO> lists=visRecordMapper.visList();
List list = new ArrayList<>();
for(VisRecordDTO dto : lists){
list.add(Lists.newArrayList(dto.getId(),dto.getUserId(),dto.getUrl()));
}
ExcelFileGeneratorUtil generator = new ExcelFileGeneratorUtil(Lists.newArrayList("主键", "用户ID", "连接"), (ArrayList) list);
SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
String fileName = (df.format(new Date() )+ ".xlsx").toString();
generator.exportExcel(response, fileName);
}catch (Exception e){
e.printStackTrace();
}
}
}