Извините, я не могу воспроизвести вашу проблему.Я скачал твой файл.Затем при запуске следующего кода:
import org.apache.poi.ss.usermodel.*;
import java.io.FileInputStream;
import java.io.File;
class ReadExcelFormulaEvaluatorExample {
static Workbook workBook;
static Sheet sheet;
static FormulaEvaluator evaluator;
static DataFormatter formatter;
static {
try {
workBook = WorkbookFactory.create(new FileInputStream(new File("config.xlsx")));
sheet = workBook.getSheetAt(0);
evaluator = workBook.getCreationHelper().createFormulaEvaluator();
formatter = new DataFormatter();
} catch (Exception ex) {
ex.printStackTrace();
}
}
static CellValue getCellValue(int r, int c) throws Exception {
Row row = sheet.getRow(r);
Cell cell = row.getCell(c);
System.err.println(cell.getCellFormula());
CellValue cellValue = evaluator.evaluate(cell);
return cellValue;
}
static String getCellContent(int r, int c) throws Exception {
Row row = sheet.getRow(r);
Cell cell = row.getCell(c);
System.err.println(cell.getCellFormula());
String cellContent = formatter.formatCellValue(cell, evaluator);
return cellContent;
}
public static void main(String[] args) throws Exception {
System.out.println("G2:");
System.out.println(getCellValue(1, 6));
System.out.println("Cell values:");
for (int r = 1; r < 4; r++) {
System.out.println(getCellValue(r, 5));
}
System.out.println("Cell contents:");
for (int r = 1; r < 4; r++) {
System.out.println(getCellContent(r, 5));
}
workBook.close();
}
}
в среде: Java 8
, apache poi 4.0.0
.Он выдает следующие выходные данные:
axel@arichter:~/Dokumente/JAVA/poi/poi-4.0.0$ java -cp .:./*:./lib/*:./ooxml-lib/* ReadExcelFormulaEvaluatorExample
G2:
TODAY()-1
org.apache.poi.ss.usermodel.CellValue [43369.0]
Cell values:
VLOOKUP(F4,A:C,2,0)
org.apache.poi.ss.usermodel.CellValue [43362.0]
VLOOKUP(F4,A:D,4,0)
org.apache.poi.ss.usermodel.CellValue ["Period 10"]
SUMIFS(A:A,B:B,"<="&G2,C:C,">="&G2)
org.apache.poi.ss.usermodel.CellValue [10.0]
Cell contents:
VLOOKUP(F4,A:C,2,0)
9/19/18
VLOOKUP(F4,A:D,4,0)
Period 10
SUMIFS(A:A,B:B,"<="&G2,C:C,">="&G2)
10
Кстати: все даты в B:B
и C:C
расположены в порядке возрастания, и между датой окончания в C:C
и следующим началом в промежутке нет никаких пробелов.B:B
, формулу
SUMIFS(A:A,B:B,"<="&G2,C:C,">="&G2)
можно заменить на
INDEX(A:A,MATCH(G2,B:B,1))
.