常用共能 之 poi
阿新 • • 發佈:2018-10-31
spring boot引入poi 只要引入 poi-ooxml jar即可
idea裡開啟pom檔案 alt+insert就可新增依賴了
1、獲取的單元格 cell可能為null ,說明前臺單元格是空的或者其它 ,這時候就無法給單元設定背景色
要sheet.getRow(i).createCell(18).setCellStyle(cellStyle); 那種正常有內容的單元格直接sheet.getRow(i).getCell(18).setCellStyle(cellStyle);
2、獲取到cell以後 判斷cell的值型別
public static Object getValueByType(XSSFCell cell) throws NullPointerException, Exception{ Object value=""; if (null != cell) { switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_NUMERIC: // 數字 if(HSSFDateUtil.isCellDateFormatted(cell)){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())).toString(); }else{ value = cell.getNumericCellValue(); } break; case HSSFCell.CELL_TYPE_STRING: // 字串 value=cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean value = cell.getBooleanCellValue(); break; case HSSFCell.CELL_TYPE_FORMULA: // 公式 value = cell.getCellFormula(); break; case HSSFCell.CELL_TYPE_BLANK: // 空值 value=""; break; case HSSFCell.CELL_TYPE_ERROR: // 故障 value=""; break; default: System.out.print("未知型別 "); break; } } return value; }
3、設定背景色
wb = new XSSFWorkbook(file.getInputStream()); CellStyle cellStyle = wb.createCellStyle(); cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); //填充單元格 cellStyle.setFillForegroundColor(HSSFColor.RED.index); //填紅色 CellStyle yellowCellStyle = wb.createCellStyle(); yellowCellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); //填充單元格 yellowCellStyle.setFillForegroundColor(HSSFColor.YELLOW.index); //填紅色
4、常用工具類
package com.yang.exceloperate;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class ExcelOperate {
public static void main(String[] args) {
// 建立Excel表格
createExcel(getStudent());
// 讀取Excel表格
List<Student> list = readExcel();
System.out.println(list.toString());
}
/**
* 初始化資料
*
* @return 資料
*/
private static List<Student> getStudent() {
List<Student> list = new ArrayList<Student>();
Student student1 = new Student("小明", 8, "二年級");
Student student2 = new Student("小光", 9, "三年級");
Student student3 = new Student("小花", 10, "四年級");
list.add(student1);
list.add(student2);
list.add(student3);
return list;
}
/**
* 建立Excel
*
* @param list
* 資料
*/
private static void createExcel(List<Student> list) {
// 建立一個Excel檔案
//HSSFworkbook 2003版excel XSSFWorkbook是操作Excel2007的版本excel 這兩個都已讀取excel或者寫入excel
//從POI 3.8版本開始,提供了一種基於XSSF的低記憶體佔用的API----SXSSF 只能寫入excel 不能從excel,適合大量資料從庫中匯入excel用
//當資料量超出65536條後,在使用HSSFWorkbook或XSSFWorkbook,程式會報OutOfMemoryError:Javaheap space;記憶體溢位錯誤。這時應該用SXSSFworkbook。
//三者使用的時候只要 new HSSFWorkbook(); 改變就行了,下面的api都一樣
HSSFWorkbook workbook = new HSSFWorkbook();
// 建立一個工作表
HSSFSheet sheet = workbook.createSheet("學生表一");
// 新增表頭行
HSSFRow hssfRow = sheet.createRow(0);
// 設定單元格格式居中
HSSFCellStyle cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 新增表頭內容
HSSFCell headCell = hssfRow.createCell(0);
headCell.setCellValue("姓名");
headCell.setCellStyle(cellStyle);
headCell = hssfRow.createCell(1);
headCell.setCellValue("年齡");
headCell.setCellStyle(cellStyle);
headCell = hssfRow.createCell(2);
headCell.setCellValue("年級");
headCell.setCellStyle(cellStyle);
// 新增資料內容
for (int i = 0; i < list.size(); i++) {
hssfRow = sheet.createRow((int) i + 1);
Student student = list.get(i);
// 建立單元格,並設定值
HSSFCell cell = hssfRow.createCell(0);
cell.setCellValue(student.getName());
cell.setCellStyle(cellStyle);
cell = hssfRow.createCell(1);
cell.setCellValue(student.getAge());
cell.setCellStyle(cellStyle);
cell = hssfRow.createCell(2);
cell.setCellValue(student.getGrade());
cell.setCellStyle(cellStyle);
}
// 儲存下載Excel檔案
try {
OutputStream outputStream = new FileOutputStream("D:/students.xls");
workbook.write(outputStream);
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 讀取Excel
*
* @return 資料集合
*/
private static List<Student> readExcel() {
List<Student> list = new ArrayList<Student>();
HSSFWorkbook workbook = null;
try {
// 讀取Excel檔案
//ServletContext能夠獲得整個專案之內的檔案
//InputStream inputStream=request.getServletContext().getResourceAsStream("/a.xls");
InputStream inputStream = new FileInputStream("D:/students.xls");
workbook = new HSSFWorkbook(inputStream);
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
// 迴圈工作表 遍歷每個表
for (int numSheet = 0; numSheet < workbook.getNumberOfSheets(); numSheet++) {
HSSFSheet hssfSheet = workbook.getSheetAt(numSheet);
if (hssfSheet == null) {
continue;
}
// 迴圈行 遍歷行
for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
HSSFRow hssfRow = hssfSheet.getRow(rowNum);
if (hssfRow == null) {
continue;
}
// 將單元格中的內容存入集合
Student student = new Student();
HSSFCell cell = hssfRow.getCell(0);//得到第一列的資料
if (cell == null) {
continue;
}
student.setName(cell.getStringCellValue());
cell = hssfRow.getCell(1);//得到第二列的資料
if (cell == null) {
continue;
}
student.setAge((int) cell.getNumericCellValue());
cell = hssfRow.getCell(2);//得到第三列的資料
if (cell == null) {
continue;
}
student.setGrade(cell.getStringCellValue());
list.add(student);
}
}
return list;
}
}