Add basic maven pom.xml and test
This commit is contained in:
parent
4727ab718d
commit
2344fa97c4
1
.gitignore
vendored
1
.gitignore
vendored
@ -19,3 +19,4 @@ bin
|
||||
out
|
||||
.idea
|
||||
.gradle
|
||||
target
|
||||
|
109
pom.xml
Normal file
109
pom.xml
Normal file
@ -0,0 +1,109 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.moparisthebest.poi</groupId>
|
||||
<artifactId>poi-fast-calc</artifactId>
|
||||
<version>3.16</version>
|
||||
<packaging>jar</packaging>
|
||||
<name>Apache POI</name>
|
||||
<url>http://poi.apache.org/</url>
|
||||
<description>Apache POI - Java API To Access Microsoft Format Files</description>
|
||||
|
||||
<mailingLists>
|
||||
<mailingList>
|
||||
<name>POI Users List</name>
|
||||
<subscribe>user-subscribe@poi.apache.org</subscribe>
|
||||
<unsubscribe>user-unsubscribe@poi.apache.org</unsubscribe>
|
||||
<archive>http://mail-archives.apache.org/mod_mbox/poi-user/</archive>
|
||||
</mailingList>
|
||||
<mailingList>
|
||||
<name>POI Developer List</name>
|
||||
<subscribe>dev-subscribe@poi.apache.org</subscribe>
|
||||
<unsubscribe>dev-unsubscribe@poi.apache.org</unsubscribe>
|
||||
<archive>http://mail-archives.apache.org/mod_mbox/poi-dev/</archive>
|
||||
</mailingList>
|
||||
</mailingLists>
|
||||
|
||||
<licenses>
|
||||
<license>
|
||||
<name>The Apache Software License, Version 2.0</name>
|
||||
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
|
||||
</license>
|
||||
</licenses>
|
||||
|
||||
<organization>
|
||||
<name>Apache Software Foundation</name>
|
||||
<url>http://www.apache.org/</url>
|
||||
</organization>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>commons-logging</groupId>
|
||||
<artifactId>commons-logging</artifactId>
|
||||
<version>1.2</version>
|
||||
<scope>provided</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>log4j</groupId>
|
||||
<artifactId>log4j</artifactId>
|
||||
<version>1.2.17</version>
|
||||
<scope>runtime</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-codec</groupId>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
<version>1.10</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.hamcrest</groupId>
|
||||
<artifactId>hamcrest-core</artifactId>
|
||||
<scope>test</scope>
|
||||
<version>1.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<scope>test</scope>
|
||||
<version>4.12</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-collections4</artifactId>
|
||||
<version>4.1</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<sourceDirectory>src/java</sourceDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/resources/main</directory>
|
||||
</resource>
|
||||
</resources>
|
||||
</build>
|
||||
</project>
|
118
src/test/java/CalculationTest.java
Normal file
118
src/test/java/CalculationTest.java
Normal file
@ -0,0 +1,118 @@
|
||||
//package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.apache.poi.ss.SpreadsheetVersion;
|
||||
import org.apache.poi.ss.usermodel.*;
|
||||
//import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
public class CalculationTest {
|
||||
public static void main(String[] args) {
|
||||
new CalculationTest().test();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
runAssert(5000, 519.4700000000496);
|
||||
runAssert(20000, 2019.469999999259);
|
||||
runAssert(65536, 6573.070000006382);
|
||||
runAssert(65537, 6573.170000006382);
|
||||
runAssert(65538, 6573.270000006382);
|
||||
runAssert(65539, 6573.370000006383);
|
||||
runAssert(100000, 10019.470000018919);
|
||||
runAssert(SpreadsheetVersion.EXCEL2007.getLastRowIndex() - 5, 104876.47000161673);
|
||||
runAssert(SpreadsheetVersion.EXCEL2007.getLastRowIndex(), 104876.97000161676);
|
||||
runAssert(SpreadsheetVersion.EXCEL2007.getMaxRows(), 104877.07000161677);
|
||||
//runAssert(SpreadsheetVersion.EXCEL2007.getMaxRows() + 1, 104877.07000161677); // java.lang.IllegalArgumentException: Invalid row number (1048576) outside allowable range (0..1048575)
|
||||
}
|
||||
|
||||
/*
|
||||
public static Workbook newXSSFWorkbookNoFormulaValidation() {
|
||||
final org.apache.poi.xssf.usermodel.XSSFWorkbook wb = new XSSFWorkbook();
|
||||
wb.setCellFormulaValidation(false);
|
||||
return wb;
|
||||
}
|
||||
*/
|
||||
|
||||
public static void runAssert(final int maxRow, final double expected) {
|
||||
//runAssert(new org.apache.poi.hssf.usermodel.GenericSSEvaluationWorkbook(), maxRow, expected);
|
||||
runAssert(new org.apache.poi.hssf.usermodel.HSSFWorkbook(SpreadsheetVersion.EXCEL2007), maxRow, expected);
|
||||
if(maxRow <= SpreadsheetVersion.EXCEL97.getMaxRows())
|
||||
runAssert(new org.apache.poi.hssf.usermodel.HSSFWorkbook(), maxRow, expected);
|
||||
//runAssert(newXSSFWorkbookNoFormulaValidation(), maxRow, expected);
|
||||
}
|
||||
|
||||
public static void runAssert(final Workbook wb, final int maxRow, final double expected) {
|
||||
|
||||
final FormulaEvaluator formulaEval = wb.getCreationHelper().createFormulaEvaluator();
|
||||
final Sheet sheet = wb.createSheet();
|
||||
int rowNum = -1, cellNum;
|
||||
Row row;
|
||||
Cell formulaCell;
|
||||
CellValue evaluatedCell = null;
|
||||
|
||||
row = sheet.createRow(++rowNum);
|
||||
cellNum = -1;
|
||||
row.createCell(++cellNum).setCellValue("Product1");
|
||||
row.createCell(++cellNum).setCellValue(10.67);
|
||||
row.createCell(++cellNum).setCellValue(8);
|
||||
|
||||
double price = 19.57;
|
||||
int quantity = 3;
|
||||
|
||||
final int maxRows = maxRow - 1; // because we created 1 above
|
||||
|
||||
final long start = System.currentTimeMillis();
|
||||
|
||||
//rowNum = maxRow - 3;
|
||||
//for (int _x = maxRow - 3; _x < maxRows; ++_x) {
|
||||
for (int _x = 0; _x < maxRows; ++_x) {
|
||||
row = sheet.createRow(++rowNum);
|
||||
cellNum = -1;
|
||||
final int rowNumUse = rowNum + 1;
|
||||
row.createCell(++cellNum).setCellValue("Product" + rowNumUse);
|
||||
price += 0.1;
|
||||
++quantity;
|
||||
row.createCell(++cellNum).setCellValue(price);
|
||||
row.createCell(++cellNum).setCellValue(quantity);
|
||||
|
||||
formulaCell = row.createCell(++cellNum);
|
||||
//formulaCell.setCellFormula("VLOOKUP(\"Product" + rowNum + "\",$A:$C,2,0)");
|
||||
formulaCell.setCellFormula("VLOOKUP(\"Product" + rowNumUse + "\",A" + rowNumUse + ":C" + rowNumUse + ",2,0)");
|
||||
//formulaCell.setCellFormula("B" + rowNumUse);
|
||||
//System.out.println("formulaCell: " + formulaCell);
|
||||
|
||||
evaluatedCell = formulaEval.evaluate(formulaCell);
|
||||
//System.out.println("evaluatedCell: " + evaluatedCell);
|
||||
if (evaluatedCell == null || evaluatedCell.getNumberValue() != price) {
|
||||
throw new AssertionError(String.format("Expected %f but got %s at rowNum: %d, rowNumUse: %d", price, evaluatedCell, rowNum, rowNumUse));
|
||||
//System.out.println(String.format("Expected %f but got %s at rowNum: %d, rowNumUse: %d", price, evaluatedCell, rowNum, rowNumUse));
|
||||
//break;
|
||||
}
|
||||
}
|
||||
|
||||
//System.out.println("evaluatedCell: " + evaluatedCell);
|
||||
|
||||
final long elapsed = System.currentTimeMillis() - start;
|
||||
System.out.printf("impl: %s, maxRow: %d, elapsed: %dms, %ds, %dmin%n", wb.getClass().getSimpleName(), maxRow, elapsed,
|
||||
elapsed / 1000, elapsed / 1000 / 60);
|
||||
|
||||
if (evaluatedCell == null || evaluatedCell.getNumberValue() != expected) {
|
||||
throw new AssertionError("Expected " + expected + " but got " + evaluatedCell);
|
||||
//System.out.println("Expected " + expected + " but got " + evaluatedCell);
|
||||
}
|
||||
|
||||
/*
|
||||
if(wb instanceof XSSFWorkbook) {
|
||||
try (FileOutputStream fos = new FileOutputStream("test.xlsx")) {
|
||||
wb.write(fos);
|
||||
} catch (Throwable e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user