1. 表格有公式,但是导入的时候获取不到,都获取到0?
解决: 自己写一个处理类,不要用他自己的util,借助FormulaEvaluator 获取公式计算的值
package com.changcheng.excel.utils;
import com.changcheng.excel.pojo.ExcelMessage;
import com.changcheng.excel.pojo.ExcelMessage2;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.CellValue;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.ArrayList;
import java.util.List;
import static org.apache.poi.ss.usermodel.CellType.*;
/**
* Created on 2021/8/23
*
* @Author ZFH
*/
public class ExcelReadUtil {
private static FormulaEvaluator evaluator;
public static List<ExcelMessage> getList(XSSFWorkbook workbook, Integer sheetNumber,Integer beginNumber) {
evaluator = workbook.getCreationHelper().createFormulaEvaluator();
XSSFSheet sheet = workbook.getSheetAt(sheetNumber);
int lastRowNum = sheet.getLastRowNum();
List<ExcelMessage> list = new ArrayList<>();
for (int i = beginNumber; i < lastRowNum + 1; i++) {
ExcelMessage excelMessage = new ExcelMessage();
XSSFRow row = sheet.getRow(i);
XSSFCell cell0 = row.getCell(0);
excelMessage.setAddress(cell0.getStringCellValue());
XSSFCell cell1 = row.getCell(1);
excelMessage.setType(cell1.getStringCellValue());
XSSFCell cell2 = row.getCell(2);
excelMessage.setNumber(cell2.getStringCellValue());
XSSFCell cell3 = row.getCell(3);
evaluator.evaluateFormulaCell(cell3);
CellValue cellValue = evaluator.evaluate(cell3);
Integer celldata = new Double(cellValue.getNumberValue()).intValue();
excelMessage.setIntType(String.valueOf(celldata));
XSSFCell cell4 = row.getCell(4);
evaluator.evaluateFormulaCell(cell4);
CellValue cellValue2 = evaluator.evaluate(cell4);
excelMessage.setSmallType(String.valueOf(cellValue2.getStringValue()));
XSSFCell cell5 = row.getCell(5);
evaluator.evaluateFormulaCell(cell5);
CellValue cellValue3 = evaluator.evaluate(cell5);
Double celldata3 = cellValue3.getNumberValue();
excelMessage.setStart(String.valueOf(celldata3));
XSSFCell cell6 = row.getCell(6);
excelMessage.setBefore(cell6.getStringCellValue());
XSSFCell cell7 = row.getCell(7);
excelMessage.setMiddle1(cell7.getStringCellValue());
XSSFCell cell8 = row.getCell(8);
excelMessage.setMiddle2(cell8.getStringCellValue());
XSSFCell cell9 = row.getCell(9);
excelMessage.setLast(cell9.getStringCellValue());
XSSFCell cell10 = row.getCell(10);
evaluator.evaluateFormulaCell(cell10);
CellValue cellValue10 = evaluator.evaluate(cell10);
String celldata10= cellValue10.getStringValue();
excelMessage.setAssemble(celldata10);
XSSFCell cell11 = row.getCell(11);
evaluator.evaluateFormulaCell(cell11);
CellValue cellValue11 = evaluator.evaluate(cell11);
String celldata11= cellValue11.getStringValue();
excelMessage.setResult(celldata11);
list.add(excelMessage);
}
return list;
}
public static List<ExcelMessage2> getList2(XSSFWorkbook workbook, Integer sheetNumber, Integer beginNumber) {
evaluator = workbook.getCreationHelper().createFormulaEvaluator();
XSSFSheet sheet = workbook.getSheetAt(sheetNumber);
int lastRowNum = sheet.getLastRowNum();
List<ExcelMessage2> list = new ArrayList<>();
for (int i = beginNumber; i < lastRowNum + 1; i++) {
ExcelMessage2 excelMessage = new ExcelMessage2();
XSSFRow row = sheet.getRow(i);
XSSFCell cell2 = row.getCell(2);
excelMessage.setAddress(cell2.getStringCellValue());
XSSFCell cell3 = row.getCell(3);
excelMessage.setType(cell3.getStringCellValue());
list.add(excelMessage);
}
return list;
}
}