Controller層代碼如下:
? ?@Controller
? ? public class ExportController{? ?
? ? ? ? @Autowired? ?
? ? ? ? private ExportService exportService;? ?
? ? ? ? @RequestMapping(value = "/export/excel")? ?
? ? ? ? public void exportExcel(HttpServletRequest request, HttpServletResponse response)? ?
? ? ? ? throws Exception {? ?
? ? ? ? ? ? //生成一個(gè)列表信息
? ? ? ? ? ? List<Student> list = new ArrayList<Student>();? ?
? ? ? ? ? ? list.add(new Student(0001,"童年","22","男"));? ?
? ? ? ? ? ? list.add(new Student(0002,"光光","23","女"));? ?
? ? ? ? ? ? list.add(new Student(0003,"丁丁","21","男"));?
? ? ? ? ? ? XSSFWorkbook wb = exportService.export(list);? ?
? ? ? ? ? ? response.setContentType("application/vnd.ms-excel");? ?
? ? ? ? ? ? response.setHeader("Content-disposition", "attachment;filename=student.xlsx");? ?
? ? ? ? ? ? OutputStream ouputStream = response.getOutputStream();? ?
? ? ? ? ? ? wb.write(ouputStream);? ?
? ? ? ? ? ? ouputStream.flush();? ?
? ? ? ? ? ? ouputStream.close();? ?
? ? ? }? ?
? ? }?
Service層代碼如下:
@Service
public class ExportService {
? ? ? ? //定義表頭
? ? ? ? String[] excelHeader = {"學(xué)號(hào)", "姓名", "年齡","性別"};? ?
? ? ? ? public XSSFWorkbook export(List<Campaign> list) {? ?
? ? ? ? ? ? //這里需要說(shuō)明一個(gè)問(wèn)題:如果是 Offices 2007以前的Excel版本,new的對(duì)象是:**HSSFWorkbook** ,Offices 2007以后的Excel版本new的對(duì)象才是XSSFWorkbook
? ? ? ? ? ? XSSFWorkbook wb = new XSSFWorkbook();?
? ? ? ? ? ? //生成一個(gè)工作表
? ? ? ? ? ? Sheet sheet = wb.createSheet("學(xué)生表");
? ? ? ? ? ? //生成第一行
? ? ? ? ? ? Row row = sheet.createRow((int) 0);? ?
? ? ? ? ? ? //生成單元格的樣式style
? ? ? ? ? ? XSSFCellStyle style = wb.createCellStyle();? ?
? ? ? ? ? ? style.setAlignment(CellStyle.ALIGN_CENTER);
? ? ? ? ? ? for (int i = 0; i < excelHeader.length; i++) {
? ? ? ? ? ? ? ? //獲取每一個(gè)單元格
? ? ? ? ? ? ? ? Cell cell = row.createCell(i);? ?
? ? ? ? ? ? ? ? //給單元格賦值
? ? ? ? ? ? ? ? cell.setCellValue(excelHeader[i]);? ?
? ? ? ? ? ? ? ? //設(shè)置單元格的樣式
? ? ? ? ? ? ? ? cell.setCellStyle(style);
? ? ? ? ? ? }? ?
? ? ? ? ? ? for (int i = 0; i < list.size(); i++) {? ?
? ? ? ? ? ? ? ? //得到當(dāng)前行數(shù)的下一行(row.getRowNum():得到當(dāng)前行數(shù))
? ? ? ? ? ? ? ? row = sheet.createRow(row.getRowNum() + 1);? ?
? ? ? ? ? ? ? ? Student student = list.get(i);? ?
? ? ? ? ? ? ? ? //賦值
? ? ? ? ? ? ? ? row.createCell(0).setCellValue(student.getSno());? ?
? ? ? ? ? ? ? ? row.createCell(1).setCellValue(student.getName());? ?
? ? ? ? ? ? ? ? row.createCell(2).setCellValue(student.getAge());? ?
? ? ? ? ? ? ? ? row.createCell(3).setCellValue(student.getSex());
? ? ? ? ? ? }? ?
? ? ? ? ? ? return wb;? ?
? ? ? ? }? ?
? ? }? ?