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"));