Java使用Apache的poi實現Excel匯出(日常總結)
阿新 • • 發佈:2018-12-05
一.導包org.apache.poi
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.16</version>
</dependency>
二.實現controller (本次環境是springboot)
package com.example.excelcontroller; import com.example.excelservice.ExcelService; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import javax.servlet.http.HttpServletResponse; import java.io.OutputStream; /** * 匯出Excel的controller * * @author liucong */ @RestController @RequestMapping("/acr") public class ExcelController { @Autowired private ExcelService excelService; @RequestMapping("export_excel") public void exportExcel(HttpServletResponse response) { //設定匯出格式 response.setContentType("application/vnd.ms-excel;chartset=utf-8"); //attachment 作為附件下載 || inline 線上開啟 response.setHeader("Content-Disposition", "attachment;filename=test.xls"); OutputStream outputStream = null; try { HSSFWorkbook wb = excelService.exportExcelStudent(); outputStream = response.getOutputStream(); wb.write(outputStream); //清空記憶體中的緩衝區資料 outputStream.flush(); //關閉流 outputStream.close(); } catch (Exception e) { e.printStackTrace(); } } }
三.service的實現類
package com.example.excelservice.impl; import com.example.excelservice.ExcelService; import com.example.param.Student; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.VerticalAlignment; import org.springframework.stereotype.Service; import java.util.LinkedList; import java.util.List; /** * Create By Liucong * @author liucong */ @Service public class ExcelServiceImpl implements ExcelService { @Override public HSSFWorkbook exportExcelStudent() { //1.建立工作薄 HSSFWorkbook wb = new HSSFWorkbook(); //2.建立表 HSSFSheet sheet = wb.createSheet("sheet1"); //2.1設定列寬(必須先設定列寬然後設定行高,不然列寬沒有效果) sheet.setDefaultColumnWidth(100); //2.2設定列高 sheet.setDefaultRowHeight((short) 100); //3.建立行 HSSFRow row = sheet.createRow(0); //4.生成樣式 HSSFCellStyle style = wb.createCellStyle(); //4.1設定水平居中 style.setAlignment(HorizontalAlignment.CENTER); //4.2設定垂直居中 style.setVerticalAlignment(VerticalAlignment.CENTER); //4.3設定背景顏色 style.setFillForegroundColor(HSSFColor.HSSFColorPredefined.ROYAL_BLUE.getIndex()); style.setFillPattern(FillPatternType.SOLID_FOREGROUND); style.setFillBackgroundColor(HSSFColor.HSSFColorPredefined.ROYAL_BLUE.getIndex()); //4.4設定邊框 style.setBorderBottom(BorderStyle.THIN); style.setBorderLeft(BorderStyle.THIN); style.setBorderRight(BorderStyle.THIN); style.setBorderTop(BorderStyle.THIN); //5 設定字型 HSSFFont font = wb.createFont(); font.setFontHeightInPoints((short) 10); font.setColor(HSSFColor.HSSFColorPredefined.RED.getIndex()); font.setBold(true); font.setFontName("宋體"); //6.把字型給當前樣式 style.setFont(font); //7.設定表頭 String[] excelHeader = {"姓名", "學號", "年齡", "性別"}; for (int i = 0; i < excelHeader.length; i++) { //當前行(第0行)的第i列 HSSFCell cell = row.createCell(i); cell.setCellValue(excelHeader[i]); cell.setCellStyle(style); } //設定假資料 Student student1 = new Student("張三", "201841030101", 18, "男"); Student student2 = new Student("李思", "201841030102", 10, "女"); Student student3 = new Student("王舞", "201841030103", 33, "不男不女"); List<Student> list = new LinkedList<>(); list.add(student1); list.add(student2); list.add(student3); //新增資料 for(int i = 0; i < list.size(); i++) { row = sheet.createRow(i + 1); row.createCell(0).setCellValue(list.get(i).getName()); row.createCell(0).setCellValue(list.get(i).getId()); row.createCell(0).setCellValue(list.get(i).getAge()); row.createCell(0).setCellValue(list.get(i).getSex()); } return wb; } }
四.實體
package com.example.param;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* 學生實體
*
* @author liucong
*/
@Data
@AllArgsConstructor
public class Student {
private String name;
private String id;
private Integer age;
private String sex;
}
五.使用postman進行測試