1. 程式人生 > >Java使用Apache的poi實現Excel匯出(日常總結)

Java使用Apache的poi實現Excel匯出(日常總結)

一.導包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進行測試