poi基本使用


poi基本使用

依賴

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.10.1</version>
</dependency>

本地生成Excel

數據類

package com.ytkj.mozq_excel_server.poi;

import lombok.Data;

import java.util.List;

/**
 * @date: 2019/10/30 15:00
 */
@Data
public class ExcelData {
    private String fileName = "測試表格";
    private String sheetName = "表格名稱";
    private String[] columns;
    private List<String[]> data;
}

創建代碼

package com.ytkj.mozq_excel_server.poi;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.format.CellFormatType;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @date: 2019/10/30 14:57
 */
public class Test01 {
    public static void main(String[] args) throws IOException {
        //行和列的起始索引都是0。
        /*=========== 創建數據對象 ==========*/
        ExcelData excelData = new ExcelData();
        excelData.setColumns(new String[]{
                "車牌號",
                "車輛載重",
                "車輛類型"
        });
        List<String[]> data = new ArrayList<>();
        data.add(new String[]{
                "陝A0001",
                "5.5",
                "半掛"
        });
        excelData.setData(data);

        /*=========== 創建工作簿,寫入數據 ==========*/
        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet("測試表");
        //創建標題行
        HSSFRow row = sheet.createRow(0);
        for (int i = 0; i < excelData.getColumns().length; i++) {
            HSSFCell cell = row.createCell(i);
            cell.setCellValue(excelData.getColumns()[i]);
        }

        //創建數據行
        for (int i = 0; i < excelData.getData().size(); i++) {
            HSSFRow aRow = sheet.createRow(i + 1);
            String[] rowData = excelData.getData().get(i);
            for (int j = 0; j < rowData.length; j++) {
                HSSFCell cell = aRow.createCell(j);
                cell.setCellValue(rowData[j]);
            }
        }

        /*=========== 將工作簿寫入輸出流 ==========*/
        wb.write(new FileOutputStream("E:\\mozq\\00store\\demo1.xlsx"));
    }
    /*
    Exception in thread "main" java.io.FileNotFoundException: E:\mozq\00store\x1.xlsx (另一個程序正在使用此文件,進程無法訪問。)
     */
}

下載Excel

package com.ytkj.mozq_excel_server.controller.car.test;

import com.ytkj.mozq_excel_server.poi.ExcelData;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @date: 2019/10/30 15:44
 */
@RestController
@RequestMapping("/car")
public class POIController {
    @RequestMapping("/exportCarExcel")
    public void exportCarExcel(HttpServletResponse response){
        /*=========== 創建數據對象 ==========*/
        ExcelData excelData = getCarExcelData();
        /*=========== 創建工作簿,寫入數據 ==========*/
        HSSFWorkbook wb = getWorkbook(excelData);
        //將數據寫入響應
        try {
            wb.write(response.getOutputStream());
            // response.setHeader("Content-Disposition", "attachment;filename=" + "測試表下載.xlsx");
            response.setContentType("application/force-download");
            response.setHeader("Content-Disposition", "attachment;filename=" + new String("測試表下載.xlsx".getBytes("UTF-8"), "ISO-8859-1"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private HSSFWorkbook getWorkbook(ExcelData excelData){
        /*=========== 創建工作簿,寫入數據 ==========*/
        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet("測試表");
        //創建標題行
        HSSFRow row = sheet.createRow(0);
        for (int i = 0; i < excelData.getColumns().length; i++) {
            HSSFCell cell = row.createCell(i);
            cell.setCellValue(excelData.getColumns()[i]);
        }

        //創建數據行
        for (int i = 0; i < excelData.getData().size(); i++) {
            HSSFRow aRow = sheet.createRow(i + 1);
            String[] rowData = excelData.getData().get(i);
            for (int j = 0; j < rowData.length; j++) {
                HSSFCell cell = aRow.createCell(j);
                cell.setCellValue(rowData[j]);
            }
        }

        return wb;
    }

    private ExcelData getCarExcelData(){
        ExcelData excelData = new ExcelData();
        excelData.setColumns(new String[]{
            "車牌號",
            "車輛載重",
            "車輛類型"
        });
        List<String[]> data = new ArrayList<>();
        data.add(new String[]{
            "陝A0001",
            "5.5",
            "半掛"
        });
        excelData.setData(data);
        return excelData;
    }
}

Bugs

java.lang.IllegalArgumentException: The workbook already contains a sheet of this name
原因:
	重復創建名稱相同的Sheet
    HSSFWorkbook wb = getWorkbook(excelData);//這里已經創建了Sheet表。
    HSSFSheet sheet = wb.createSheet("測試表");//這里又創建同名稱的Sheet表。
# 下載文件名稱亂碼。
_____.xlsx
錯誤代碼:
	response.setHeader("Content-Disposition", "attachment;filename=" + "測試表下載.xlsx");
正確代碼:
    response.setContentType("application/force-download");
                response.setHeader("Content-Disposition", "attachment;filename=" + new 		String("測試表下載.xlsx".getBytes("UTF-8"), "ISO-8859-1"));


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM