You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2018/11/02 18:35:35 UTC
svn commit: r1845617 [1/5] - in /poi/branches/hemf: ./ jenkins/ maven/
sonar/ src/examples/src/org/apache/poi/hssf/usermodel/examples/
src/examples/src/org/apache/poi/ss/examples/
src/examples/src/org/apache/poi/xssf/usermodel/examples/ src/java/org/ap...
Author: kiwiwings
Date: Fri Nov 2 18:35:34 2018
New Revision: 1845617
URL: http://svn.apache.org/viewvc?rev=1845617&view=rev
Log:
merge trunk
Added:
poi/branches/hemf/src/java/org/apache/poi/ss/formula/functions/Frequency.java
- copied unchanged from r1845612, poi/trunk/src/java/org/apache/poi/ss/formula/functions/Frequency.java
poi/branches/hemf/src/java/org/apache/poi/ss/formula/functions/Trend.java
- copied unchanged from r1845612, poi/trunk/src/java/org/apache/poi/ss/formula/functions/Trend.java
poi/branches/hemf/src/testcases/org/apache/poi/ss/formula/functions/TestFrequency.java
- copied unchanged from r1845612, poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestFrequency.java
poi/branches/hemf/src/testcases/org/apache/poi/ss/formula/functions/TestTrendFunctionsFromSpreadsheet.java
- copied unchanged from r1845612, poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestTrendFunctionsFromSpreadsheet.java
poi/branches/hemf/test-data/document/60316.dotx
- copied unchanged from r1845612, poi/trunk/test-data/document/60316.dotx
poi/branches/hemf/test-data/document/Bug62859.docx
- copied unchanged from r1845612, poi/trunk/test-data/document/Bug62859.docx
poi/branches/hemf/test-data/spreadsheet/62624.bin
- copied unchanged from r1845612, poi/trunk/test-data/spreadsheet/62624.bin
poi/branches/hemf/test-data/spreadsheet/62625.bin
- copied unchanged from r1845612, poi/trunk/test-data/spreadsheet/62625.bin
poi/branches/hemf/test-data/spreadsheet/62815.xlsb
- copied unchanged from r1845612, poi/trunk/test-data/spreadsheet/62815.xlsb
poi/branches/hemf/test-data/spreadsheet/62815.xlsb.txt
- copied unchanged from r1845612, poi/trunk/test-data/spreadsheet/62815.xlsb.txt
poi/branches/hemf/test-data/spreadsheet/62834.xlsx
- copied unchanged from r1845612, poi/trunk/test-data/spreadsheet/62834.xlsx
poi/branches/hemf/test-data/spreadsheet/Trend.xls
- copied unchanged from r1845612, poi/trunk/test-data/spreadsheet/Trend.xls
Modified:
poi/branches/hemf/ (props changed)
poi/branches/hemf/.classpath
poi/branches/hemf/.gitignore
poi/branches/hemf/build.gradle
poi/branches/hemf/build.xml
poi/branches/hemf/jenkins/create_jobs.groovy
poi/branches/hemf/maven/poi-ooxml-schemas.pom
poi/branches/hemf/sonar/pom.xml
poi/branches/hemf/src/examples/src/org/apache/poi/hssf/usermodel/examples/AddDimensionedImage.java
poi/branches/hemf/src/examples/src/org/apache/poi/hssf/usermodel/examples/CellComments.java
poi/branches/hemf/src/examples/src/org/apache/poi/ss/examples/AddDimensionedImage.java
poi/branches/hemf/src/examples/src/org/apache/poi/xssf/usermodel/examples/NewLinesInCells.java
poi/branches/hemf/src/java/org/apache/poi/POIDocument.java
poi/branches/hemf/src/java/org/apache/poi/common/usermodel/fonts/FontFamily.java
poi/branches/hemf/src/java/org/apache/poi/common/usermodel/fonts/FontPitch.java
poi/branches/hemf/src/java/org/apache/poi/extractor/OLE2ExtractorFactory.java
poi/branches/hemf/src/java/org/apache/poi/hpsf/Property.java
poi/branches/hemf/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbookFactory.java
poi/branches/hemf/src/java/org/apache/poi/poifs/macros/VBAMacroReader.java
poi/branches/hemf/src/java/org/apache/poi/ss/format/CellDateFormatter.java
poi/branches/hemf/src/java/org/apache/poi/ss/format/CellTextFormatter.java
poi/branches/hemf/src/java/org/apache/poi/ss/formula/BaseFormulaEvaluator.java
poi/branches/hemf/src/java/org/apache/poi/ss/formula/eval/FunctionEval.java
poi/branches/hemf/src/java/org/apache/poi/ss/formula/ptg/RefPtgBase.java
poi/branches/hemf/src/java/org/apache/poi/ss/usermodel/Sheet.java
poi/branches/hemf/src/java/org/apache/poi/ss/usermodel/WorkbookFactory.java
poi/branches/hemf/src/java/org/apache/poi/ss/util/CellReference.java
poi/branches/hemf/src/java/org/apache/poi/ss/util/CellUtil.java
poi/branches/hemf/src/java/org/apache/poi/util/IOUtils.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/ooxml/POIXMLDocumentPart.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/openxml4j/exceptions/InvalidFormatException.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureConfig.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/xdgf/usermodel/XDGFShape.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/xdgf/usermodel/XDGFText.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/xdgf/util/HierarchyPrinter.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/xdgf/util/VsdxToPng.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFColor.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFNotes.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShape.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/xslf/util/PPTX2PNG.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBSheetHandler.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBUtils.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFRow.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/xssf/usermodel/BaseXSSFFormulaEvaluator.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbookFactory.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/ColumnHelper.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContent.java
poi/branches/hemf/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTable.java
poi/branches/hemf/src/ooxml/testcases/org/apache/poi/ooxml/util/OOXMLLite.java
poi/branches/hemf/src/ooxml/testcases/org/apache/poi/openxml4j/opc/ZipFileAssert.java
poi/branches/hemf/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/TestOPCComplianceCoreProperties.java
poi/branches/hemf/src/ooxml/testcases/org/apache/poi/sl/TestFonts.java
poi/branches/hemf/src/ooxml/testcases/org/apache/poi/ss/TestWorkbookFactory.java
poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextParagraph.java
poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/XSSFTestDataSamples.java
poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFBEventBasedExcelExtractor.java
poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFWorkbook.java
poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java
poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFColGrouping.java
poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFDataValidation.java
poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFormulaEvaluation.java
poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java
poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java
poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSFChartTitle.java
poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/usermodel/helpers/TestColumnHelper.java
poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/util/MemoryUsage.java
poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xwpf/extractor/TestXWPFWordExtractor.java
poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFSDT.java
poi/branches/hemf/src/scratchpad/src/org/apache/poi/hwpf/dev/HWPFLister.java
poi/branches/hemf/src/scratchpad/src/org/apache/poi/hwpf/model/FibBase.java
poi/branches/hemf/src/testcases/org/apache/poi/poifs/macros/TestVBAMacroReader.java
poi/branches/hemf/src/testcases/org/apache/poi/ss/formula/functions/AllSpreadsheetBasedTests.java
poi/branches/hemf/src/testcases/org/apache/poi/ss/util/TestDateFormatConverter.java
Propchange: poi/branches/hemf/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Nov 2 18:35:34 2018
@@ -5,4 +5,4 @@
/poi/branches/ss_border_property_template:1747847-1748074
/poi/branches/xml_signature:1617139-1628347
/poi/branches/xssf_structured_references:1747607-1747656
-/poi/trunk:693591-694881,695264-695420,695621,695649-711764,1839877-1840323,1840325-1843031,1843033-1843354
+/poi/trunk:693591-694881,695264-695420,695621,695649-711764,1839877-1840323,1840325-1843031,1843033-1845612
Modified: poi/branches/hemf/.classpath
URL: http://svn.apache.org/viewvc/poi/branches/hemf/.classpath?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/.classpath (original)
+++ poi/branches/hemf/.classpath Fri Nov 2 18:35:34 2018
@@ -18,7 +18,7 @@
<classpathentry kind="lib" path="lib/ant-1.10.1.jar"/>
<classpathentry kind="lib" path="lib/ant-launcher-1.10.1.jar"/>
<classpathentry kind="lib" path="lib/log4j-1.2.17.jar"/>
- <classpathentry exported="true" kind="lib" path="ooxml-lib/xmlbeans-3.0.1.jar" sourcepath="ooxml-lib/xmlbeans-3.0.1.jar"/>
+ <classpathentry exported="true" kind="lib" path="ooxml-lib/xmlbeans-3.0.2.jar" sourcepath="ooxml-lib/xmlbeans-3.0.2.jar"/>
<classpathentry kind="lib" path="lib/hamcrest-core-1.3.jar"/>
<classpathentry kind="lib" path="lib/junit-4.12.jar"/>
<classpathentry kind="lib" path="ooxml-lib/curvesapi-1.05.jar"/>
@@ -30,13 +30,16 @@
<classpathentry exported="true" kind="lib" path="compile-lib/slf4j-api-1.7.25.jar"/>
<classpathentry kind="lib" path="compile-lib/bcpkix-jdk15on-1.60.jar"/>
<classpathentry kind="lib" path="compile-lib/bcprov-ext-jdk15on-1.60.jar"/>
+ <classpathentry kind="lib" path="ooxml-testlib/reflections.jar"/>
+ <classpathentry kind="lib" path="ooxml-testlib/guava.jar"/>
+ <classpathentry kind="lib" path="ooxml-testlib/javassist.jar"/>
<classpathentry exported="true" kind="lib" path="compile-lib/xmlsec-2.1.0.jar"/>
<classpathentry exported="true" kind="lib" path="lib/commons-codec-1.11.jar"/>
<classpathentry exported="true" kind="lib" path="lib/commons-logging-1.2.jar"/>
<classpathentry exported="true" kind="lib" path="lib/commons-collections4-4.2.jar"/>
<classpathentry kind="lib" path="lib/commons-math3-3.6.1.jar"/>
<classpathentry kind="lib" path="lib/xmlunit-core-2.5.1.jar"/>
- <classpathentry kind="lib" path="lib/mockito-core-2.13.0.jar"/>
+ <classpathentry kind="lib" path="lib/mockito-core-2.21.0.jar"/>
<classpathentry kind="lib" path="lib/byte-buddy-1.7.9.jar"/>
<classpathentry kind="lib" path="lib/byte-buddy-agent-1.7.9.jar"/>
<classpathentry kind="lib" path="lib/objenesis-2.6.jar"/>
Modified: poi/branches/hemf/.gitignore
URL: http://svn.apache.org/viewvc/poi/branches/hemf/.gitignore?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/.gitignore (original)
+++ poi/branches/hemf/.gitignore Fri Nov 2 18:35:34 2018
@@ -11,6 +11,7 @@ log*.*
forrest.properties
compile-lib/
ooxml-lib/
+ooxml-testlib/
# Eclipse
/bin
Modified: poi/branches/hemf/build.gradle
URL: http://svn.apache.org/viewvc/poi/branches/hemf/build.gradle?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/build.gradle (original)
+++ poi/branches/hemf/build.gradle Fri Nov 2 18:35:34 2018
@@ -225,7 +225,7 @@ project('ooxml') {
compileJava.dependsOn 'ant-compile-ooxml-xsds'
dependencies {
- compile 'org.apache.xmlbeans:xmlbeans:3.0.1'
+ compile 'org.apache.xmlbeans:xmlbeans:3.0.2'
compile 'org.apache.commons:commons-collections4:4.2'
compile 'org.apache.commons:commons-math3:3.6.1'
compile 'org.apache.commons:commons-compress:1.18'
Modified: poi/branches/hemf/build.xml
URL: http://svn.apache.org/viewvc/poi/branches/hemf/build.xml?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/build.xml (original)
+++ poi/branches/hemf/build.xml Fri Nov 2 18:35:34 2018
@@ -213,9 +213,9 @@ under the License.
<property name="ooxml.curvesapi.jar" location="${ooxml.lib}/curvesapi-1.05.jar"/>
<property name="ooxml.curvesapi.url"
value="${repository.m2}/maven2/com/github/virtuald/curvesapi/1.05/curvesapi-1.05.jar"/>
- <property name="ooxml.xmlbeans.jar" location="${ooxml.lib}/xmlbeans-3.0.1.jar"/>
+ <property name="ooxml.xmlbeans.jar" location="${ooxml.lib}/xmlbeans-3.0.2.jar"/>
<property name="ooxml.xmlbeans.url"
- value="https://repository.apache.org/content/repositories/releases/org/apache/xmlbeans/xmlbeans/3.0.1/xmlbeans-3.0.1.jar"/>
+ value="https://repository.apache.org/content/repositories/releases/org/apache/xmlbeans/xmlbeans/3.0.2/xmlbeans-3.0.2.jar"/>
<property name="ooxml.commons-compress.jar" location="${main.lib}/commons-compress-1.18.jar"/>
<property name="ooxml.commons-compress.url"
value="${repository.m2}/maven2/org/apache/commons/commons-compress/1.18/commons-compress-1.18.jar"/>
@@ -289,7 +289,7 @@ under the License.
<!-- build and distro settings -->
<property name="jar.name" value="poi"/>
<property name="build.site" location="build/site"/>
- <property name="javadocs.report.dir" location="${build.site}/apidocs"/>
+ <property name="javadocs.report.dir" location="${build.site}/apidocs/dev"/>
<property name="dist.dir" location="build/dist"/>
<property name="halt.on.test.failure" value="true"/>
@@ -671,6 +671,7 @@ under the License.
<include name="curvesapi-1.04.jar"/>
<include name="xmlbeans-2.*.jar"/>
<include name="xmlbeans-3.0.0.jar"/>
+ <include name="xmlbeans-3.0.1.jar"/>
</fileset>
<fileset dir="${compile.lib}">
<include name="xercesImpl-*.jar"/>
@@ -1798,9 +1799,11 @@ under the License.
<fail message="Apache Forrest is not installed."/>
</target>
- <target name="docs" depends="init, -check-forrest-installed, -check-docs, javadocs"
- unless="main.docs.notRequired" description="Builds the POI website">
-
+ <target name="docs" depends="init, -check-forrest-installed, -check-docs, javadocs, -forrest-docs"
+ unless="main.docs.notRequired"
+ description="Builds the POI website" />
+ <target name="-forrest-docs" depends="-check-forrest-installed, -check-docs"
+ unless="main.docs.notRequired" description="Builds the HTML pages of the POI website">
<exec executable="${env.FORREST_HOME}/bin/forrest" osfamily="unix"/>
<exec executable="cmd" osfamily="windows">
<arg value="/c"/>
@@ -1817,9 +1820,10 @@ under the License.
</touch>
</target>
- <!-- Generates the API documentation. -->
+ <!-- Generates the latest/development API documentation. -->
<target name="javadocs"
description="Generates the API documentation">
+ <echo message="Generating latest Javadocs in ${javadocs.report.dir}"/>
<javadoc verbose="false" author="true" destdir="${javadocs.report.dir}"
windowtitle="POI API Documentation" use="true" version="true"
maxmemory="384M" additionalparam="-notimestamp" locale="en_US"
@@ -2035,7 +2039,7 @@ under the License.
<packageset dir="@{src}" defaultexcludes="yes">
<include name="org/apache/poi/**"/>
</packageset>
- <link offline="true" href="https://poi.apache.org/apidocs" packagelistLoc="${javadocs.report.dir}"/>
+ <link offline="true" href="https://poi.apache.org/apidocs/dev" packagelistLoc="${javadocs.report.dir}"/>
</javadoc>
<jar destfile="${dist.dir}/maven/@{dest}/@{dest}-${version.id}-javadoc.jar"
manifest="build/poi-manifest.mf">
Modified: poi/branches/hemf/jenkins/create_jobs.groovy
URL: http://svn.apache.org/viewvc/poi/branches/hemf/jenkins/create_jobs.groovy?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/jenkins/create_jobs.groovy (original)
+++ poi/branches/hemf/jenkins/create_jobs.groovy Fri Nov 2 18:35:34 2018
@@ -610,7 +610,24 @@ dashboardView("P/POI-new") {
//lastSuccessDescription()
jacoco()
}
- description("Jobs related to building/testing Apache POI")
+ description("<table>\n" +
+ " <tr>\n" +
+ " <td><img src=\"https://poi.apache.org/images/project-header.png\" /></td>\n" +
+ " <td> \n" +
+ " <p>Apache POI - the Java API for Microsoft Documents</p>\n" +
+ " <p><b>Most of the POI Jobs are automatically generated by Jenkins Job DSL\n" +
+ " at <a href=\"https://svn.apache.org/repos/asf/poi/trunk/jenkins\">https://svn.apache.org/repos/asf/poi/trunk/jenkins</a>,<br/>\n" +
+ " see <a href=\"https://github.com/jenkinsci/job-dsl-plugin/wiki\">https://github.com/jenkinsci/job-dsl-plugin/wiki</a>\n" +
+ " for more details about the DSL.</b>\n" +
+ " </p>\n" +
+ " <p>\n" +
+ " <b><a href=\"job/POI-DSL-1.8/lastSuccessfulBuild/findbugsResult/\" target=\"_blank\">Findbugs report of latest build</a></b> -\n" +
+ " <b><a href=\"https://builds.apache.org/analysis/dashboard?id=org.apache.poi%3Apoi-parent&did=1\" target=\"_blank\">Sonar reports</a></b> -\n" +
+ " <b><a href=\"job/POI-DSL-1.8/lastSuccessfulBuild/artifact/build/coverage/index.html\" target=\"_blank\">Coverage of latest build</a></b>\n" +
+ " </p>\n" +
+ " </td>\n" +
+ " </tr>\n" +
+ "</table>")
filterBuildQueue(false)
filterExecutors(false)
Modified: poi/branches/hemf/maven/poi-ooxml-schemas.pom
URL: http://svn.apache.org/viewvc/poi/branches/hemf/maven/poi-ooxml-schemas.pom?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/maven/poi-ooxml-schemas.pom (original)
+++ poi/branches/hemf/maven/poi-ooxml-schemas.pom Fri Nov 2 18:35:34 2018
@@ -62,7 +62,7 @@
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
- <version>3.0.1</version>
+ <version>3.0.2</version>
</dependency>
</dependencies>
</project>
Modified: poi/branches/hemf/sonar/pom.xml
URL: http://svn.apache.org/viewvc/poi/branches/hemf/sonar/pom.xml?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/sonar/pom.xml (original)
+++ poi/branches/hemf/sonar/pom.xml Fri Nov 2 18:35:34 2018
@@ -72,7 +72,7 @@
<sonar.scm.disabled>true</sonar.scm.disabled>
<!-- define some of the third-party or plugin-versions globally to use the same in all modules -->
- <xmlbeans.version>3.0.1</xmlbeans.version>
+ <xmlbeans.version>3.0.2</xmlbeans.version>
<junit.version>4.12</junit.version>
<xmlunit.version>2.5.1</xmlunit.version>
<mockito.version>2.13.0</mockito.version>
Modified: poi/branches/hemf/src/examples/src/org/apache/poi/hssf/usermodel/examples/AddDimensionedImage.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/examples/src/org/apache/poi/hssf/usermodel/examples/AddDimensionedImage.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/examples/src/org/apache/poi/hssf/usermodel/examples/AddDimensionedImage.java (original)
+++ poi/branches/hemf/src/examples/src/org/apache/poi/hssf/usermodel/examples/AddDimensionedImage.java Fri Nov 2 18:35:34 2018
@@ -142,13 +142,13 @@ import org.apache.poi.ss.usermodel.Clien
public class AddDimensionedImage {
// Four constants that determine how - and indeed whether - the rows
- // and columns an image may overlie should be expanded to accomodate that
+ // and columns an image may overlie should be expanded to accommodate that
// image.
// Passing EXPAND_ROW will result in the height of a row being increased
- // to accomodate the image if it is not already larger. The image will
+ // to accommodate the image if it is not already larger. The image will
// be layed across one or more columns.
// Passing EXPAND_COLUMN will result in the width of the column being
- // increased to accomodate the image if it is not already larger. The image
+ // increased to accommodate the image if it is not already larger. The image
// will be layed across one or many rows.
// Passing EXPAND_ROW_AND_COLUMN will result in the height of the row
// bing increased along with the width of the column to accomdate the
@@ -266,7 +266,7 @@ public class AddDimensionedImage {
}
// Call methods to calculate how the image and sheet should be
- // manipulated to accomodate the image; columns and then rows.
+ // manipulated to accommodate the image; columns and then rows.
colClientAnchorDetail = this.fitImageToColumns(sheet, colNumber,
reqImageWidthMM, resizeBehaviour);
rowClientAnchorDetail = this.fitImageToRows(sheet, rowNumber,
@@ -312,7 +312,7 @@ public class AddDimensionedImage {
}
/**
- * Determines whether the sheets columns should be re-sized to accomodate
+ * Determines whether the sheets columns should be re-sized to accommodate
* the image, adjusts the columns width if necessary and creates then
* returns a ClientAnchorDetail object that facilitates construction of
* an HSSFClientAnchor that will fix the image on the sheet and establish
@@ -348,7 +348,7 @@ public class AddDimensionedImage {
colWidthMM = ConvertImageUnits.widthUnits2Millimetres(
(short)sheet.getColumnWidth(colNumber));
- // Check that the column's width will accomodate the image at the
+ // Check that the column's width will accommodate the image at the
// required dimension. If the width of the column is LESS than the
// required width of the image, decide how the application should
// respond - resize the column or overlay the image across one or more
@@ -396,7 +396,7 @@ public class AddDimensionedImage {
}
/**
- * Determines whether the sheet's row should be re-sized to accomodate
+ * Determines whether the sheet's row should be re-sized to accommodate
* the image, adjusts the rows height if necessary and creates then
* returns a ClientAnchorDetail object that facilitates construction of
* an HSSFClientAnchor that will fix the image on the sheet and establish
@@ -436,7 +436,7 @@ public class AddDimensionedImage {
// Get the row's height in millimetres
double rowHeightMM = row.getHeightInPoints() / ConvertImageUnits.POINTS_PER_MILLIMETRE;
- // Check that the row's height will accomodate the image at the required
+ // Check that the row's height will accommodate the image at the required
// dimensions. If the height of the row is LESS than the required height
// of the image, decide how the application should respond - resize the
// row or overlay the image across a series of rows.
Modified: poi/branches/hemf/src/examples/src/org/apache/poi/hssf/usermodel/examples/CellComments.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/examples/src/org/apache/poi/hssf/usermodel/examples/CellComments.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/examples/src/org/apache/poi/hssf/usermodel/examples/CellComments.java (original)
+++ poi/branches/hemf/src/examples/src/org/apache/poi/hssf/usermodel/examples/CellComments.java Fri Nov 2 18:35:34 2018
@@ -17,18 +17,22 @@
package org.apache.poi.hssf.usermodel.examples;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-import org.apache.poi.hssf.usermodel.HSSFCell;
-import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFComment;
-import org.apache.poi.hssf.usermodel.HSSFFont;
-import org.apache.poi.hssf.usermodel.HSSFPatriarch;
-import org.apache.poi.hssf.usermodel.HSSFRichTextString;
-import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.hssf.util.HSSFColor.HSSFColorPredefined;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.ClientAnchor;
+import org.apache.poi.ss.usermodel.Comment;
+import org.apache.poi.ss.usermodel.CreationHelper;
+import org.apache.poi.ss.usermodel.Drawing;
+import org.apache.poi.ss.usermodel.Font;
+import org.apache.poi.ss.usermodel.IndexedColors;
+import org.apache.poi.ss.usermodel.RichTextString;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.usermodel.WorkbookFactory;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
/**
* Demonstrates how to work with excel cell comments.<p>
@@ -39,46 +43,64 @@ import org.apache.poi.hssf.util.HSSFColo
public class CellComments {
public static void main(String[] args) throws IOException {
- try (HSSFWorkbook wb = new HSSFWorkbook()) {
- HSSFSheet sheet = wb.createSheet("Cell comments in POI HSSF");
+ createWorkbook(false, ".xls");
+ createWorkbook(true, ".xlsx");
+ }
+
+ private static void createWorkbook(boolean xssf, String extension) throws IOException {
+ try (Workbook wb = WorkbookFactory.create(xssf)) {
+ Sheet sheet = wb.createSheet("Cell comments in POI " + extension);
+ CreationHelper creationHelper = wb.getCreationHelper();
// Create the drawing patriarch. This is the top level container for all shapes including cell comments.
- HSSFPatriarch patr = sheet.createDrawingPatriarch();
+ Drawing<?> patr = sheet.createDrawingPatriarch();
//create a cell in row 3
- HSSFCell cell1 = sheet.createRow(3).createCell(1);
- cell1.setCellValue(new HSSFRichTextString("Hello, World"));
+ Cell cell1 = sheet.createRow(3).createCell(1);
+ cell1.setCellValue(creationHelper.createRichTextString("Hello, World"));
//anchor defines size and position of the comment in worksheet
- HSSFComment comment1 = patr.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short) 4, 2, (short) 6, 5));
+ ClientAnchor clientAnchor = creationHelper.createClientAnchor();
+ clientAnchor.setCol1(4);
+ clientAnchor.setRow1(2);
+ clientAnchor.setCol2(6);
+ clientAnchor.setRow2(5);
+ Comment comment1 = patr.createCellComment(clientAnchor);
// set text in the comment
- comment1.setString(new HSSFRichTextString("We can set comments in POI"));
+ comment1.setString(creationHelper.createRichTextString("We can set comments in POI"));
//set comment author.
//you can see it in the status bar when moving mouse over the commented cell
comment1.setAuthor("Apache Software Foundation");
- // The first way to assign comment to a cell is via HSSFCell.setCellComment method
+ // The first way to assign comment to a cell is via Cell.setCellComment method
cell1.setCellComment(comment1);
//create another cell in row 6
- HSSFCell cell2 = sheet.createRow(6).createCell(1);
+ Cell cell2 = sheet.createRow(6).createCell(1);
cell2.setCellValue(36.6);
- HSSFComment comment2 = patr.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short) 4, 8, (short) 6, 11));
- //modify background color of the comment
- comment2.setFillColor(204, 236, 255);
+ clientAnchor = creationHelper.createClientAnchor();
+ clientAnchor.setCol1(4);
+ clientAnchor.setRow1(8);
+ clientAnchor.setCol2(6);
+ clientAnchor.setRow2(11);
+ Comment comment2 = patr.createCellComment(clientAnchor);
+ //modify background color of the comment, only available in HSSF currently
+ if (wb instanceof HSSFWorkbook) {
+ ((HSSFComment) comment2).setFillColor(204, 236, 255);
+ }
- HSSFRichTextString string = new HSSFRichTextString("Normal body temperature");
+ RichTextString string = creationHelper.createRichTextString("Normal body temperature");
//apply custom font to the text in the comment
- HSSFFont font = wb.createFont();
+ Font font = wb.createFont();
font.setFontName("Arial");
font.setFontHeightInPoints((short) 10);
font.setBold(true);
- font.setColor(HSSFColorPredefined.RED.getIndex());
+ font.setColor(IndexedColors.RED.getIndex());
string.applyFont(font);
comment2.setString(string);
@@ -94,7 +116,7 @@ public class CellComments {
comment2.setRow(6);
comment2.setColumn(1);
- try (FileOutputStream out = new FileOutputStream("poi_comment.xls")) {
+ try (FileOutputStream out = new FileOutputStream("poi_comment" + extension)) {
wb.write(out);
}
}
Modified: poi/branches/hemf/src/examples/src/org/apache/poi/ss/examples/AddDimensionedImage.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/examples/src/org/apache/poi/ss/examples/AddDimensionedImage.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/examples/src/org/apache/poi/ss/examples/AddDimensionedImage.java (original)
+++ poi/branches/hemf/src/examples/src/org/apache/poi/ss/examples/AddDimensionedImage.java Fri Nov 2 18:35:34 2018
@@ -202,13 +202,13 @@ import org.apache.poi.util.IOUtils;
public class AddDimensionedImage {
// Four constants that determine how - and indeed whether - the rows
- // and columns an image may overlie should be expanded to accomodate that
+ // and columns an image may overlie should be expanded to accommodate that
// image.
// Passing EXPAND_ROW will result in the height of a row being increased
- // to accomodate the image if it is not already larger. The image will
+ // to accommodate the image if it is not already larger. The image will
// be layed across one or more columns.
// Passing EXPAND_COLUMN will result in the width of the column being
- // increased to accomodate the image if it is not already larger. The image
+ // increased to accommodate the image if it is not already larger. The image
// will be layed across one or many rows.
// Passing EXPAND_ROW_AND_COLUMN will result in the height of the row
// bing increased along with the width of the column to accomdate the
@@ -348,7 +348,7 @@ public class AddDimensionedImage {
}
// Call methods to calculate how the image and sheet should be
- // manipulated to accomodate the image; columns and then rows.
+ // manipulated to accommodate the image; columns and then rows.
colClientAnchorDetail = this.fitImageToColumns(sheet, colNumber,
reqImageWidthMM, resizeBehaviour);
rowClientAnchorDetail = this.fitImageToRows(sheet, rowNumber,
@@ -440,7 +440,7 @@ public class AddDimensionedImage {
colWidthMM = ConvertImageUnits.widthUnits2Millimetres(
(short)sheet.getColumnWidth(colNumber));
- // Check that the column's width will accomodate the image at the
+ // Check that the column's width will accommodate the image at the
// required dimension. If the width of the column is LESS than the
// required width of the image, decide how the application should
// respond - resize the column or overlay the image across one or more
@@ -500,7 +500,7 @@ public class AddDimensionedImage {
}
/**
- * Determines whether the sheets row should be re-sized to accomodate
+ * Determines whether the sheets row should be re-sized to accommodate
* the image, adjusts the rows height if necessary and creates then
* returns a ClientAnchorDetail object that facilitates construction of
* a ClientAnchor that will fix the image on the sheet and establish
@@ -542,7 +542,7 @@ public class AddDimensionedImage {
// Get the row's height in millimetres
rowHeightMM = row.getHeightInPoints() / ConvertImageUnits.POINTS_PER_MILLIMETRE;
- // Check that the row's height will accomodate the image at the required
+ // Check that the row's height will accommodate the image at the required
// dimensions. If the height of the row is LESS than the required height
// of the image, decide how the application should respond - resize the
// row or overlay the image across a series of rows.
Modified: poi/branches/hemf/src/examples/src/org/apache/poi/xssf/usermodel/examples/NewLinesInCells.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/examples/src/org/apache/poi/xssf/usermodel/examples/NewLinesInCells.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/examples/src/org/apache/poi/xssf/usermodel/examples/NewLinesInCells.java (original)
+++ poi/branches/hemf/src/examples/src/org/apache/poi/xssf/usermodel/examples/NewLinesInCells.java Fri Nov 2 18:35:34 2018
@@ -44,8 +44,8 @@ public class NewLinesInCells {
cs.setWrapText(true);
cell.setCellStyle(cs);
- //increase row height to accomodate two lines of text
- row.setHeightInPoints((2 * sheet.getDefaultRowHeightInPoints()));
+ //increase row height to accommodate two lines of text
+ row.setHeightInPoints(2 * sheet.getDefaultRowHeightInPoints());
//adjust column width to fit the content
sheet.autoSizeColumn(2);
@@ -55,5 +55,4 @@ public class NewLinesInCells {
}
}
}
-
}
Modified: poi/branches/hemf/src/java/org/apache/poi/POIDocument.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/java/org/apache/poi/POIDocument.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/java/org/apache/poi/POIDocument.java (original)
+++ poi/branches/hemf/src/java/org/apache/poi/POIDocument.java Fri Nov 2 18:35:34 2018
@@ -33,6 +33,7 @@ import org.apache.poi.hpsf.DocumentSumma
import org.apache.poi.hpsf.PropertySet;
import org.apache.poi.hpsf.PropertySetFactory;
import org.apache.poi.hpsf.SummaryInformation;
+import org.apache.poi.hpsf.WritingNotSupportedException;
import org.apache.poi.poifs.crypt.EncryptionInfo;
import org.apache.poi.poifs.crypt.Encryptor;
import org.apache.poi.poifs.crypt.cryptoapi.CryptoAPIDecryptor;
@@ -176,6 +177,8 @@ public abstract class POIDocument implem
*
* @param setName The property to read
* @return The value of the given property or null if it wasn't found.
+ *
+ * @throws IOException If retrieving properties fails
*/
@SuppressWarnings("WeakerAccess")
protected PropertySet getPropertySet(String setName) throws IOException {
@@ -189,6 +192,8 @@ public abstract class POIDocument implem
* @param setName The property to read
* @param encryptionInfo the encryption descriptor in case of cryptoAPI encryption
* @return The value of the given property or null if it wasn't found.
+ *
+ * @throws IOException If retrieving properties fails
*/
@SuppressWarnings("WeakerAccess")
protected PropertySet getPropertySet(String setName, EncryptionInfo encryptionInfo) throws IOException {
@@ -305,7 +310,8 @@ public abstract class POIDocument implem
}
/**
- * Writes out a given ProperySet
+ * Writes out a given PropertySet
+ *
* @param name the (POIFS Level) name of the property to write
* @param set the PropertySet to write out
* @param outFS the NPOIFSFileSystem to write the property into
@@ -326,7 +332,7 @@ public abstract class POIDocument implem
outFS.createOrUpdateDocument(bIn, name);
logger.log(POILogger.INFO, "Wrote property set " + name + " of size " + data.length);
- } catch(org.apache.poi.hpsf.WritingNotSupportedException wnse) {
+ } catch(WritingNotSupportedException ignored) {
logger.log( POILogger.ERROR, "Couldn't write property set with name " + name + " as not supported by HPSF yet");
}
}
@@ -468,6 +474,8 @@ public abstract class POIDocument implem
/**
* @return the encryption info if the document is encrypted, otherwise {@code null}
+ *
+ * @throws IOException If retrieving the encryption information fails
*/
public EncryptionInfo getEncryptionInfo() throws IOException {
return null;
Modified: poi/branches/hemf/src/java/org/apache/poi/common/usermodel/fonts/FontFamily.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/java/org/apache/poi/common/usermodel/fonts/FontFamily.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/java/org/apache/poi/common/usermodel/fonts/FontFamily.java (original)
+++ poi/branches/hemf/src/java/org/apache/poi/common/usermodel/fonts/FontFamily.java Fri Nov 2 18:35:34 2018
@@ -68,13 +68,15 @@ public enum FontFamily {
}
return null;
}
-
/**
* Get FontFamily from combined native id
+ *
+ * @param pitchAndFamily The PitchFamily to decode.
+ *
+ * @return The resulting FontFamily
*/
public static FontFamily valueOfPitchFamily(byte pitchAndFamily) {
return valueOf(pitchAndFamily >>> 4);
}
-
-}
\ No newline at end of file
+}
Modified: poi/branches/hemf/src/java/org/apache/poi/common/usermodel/fonts/FontPitch.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/java/org/apache/poi/common/usermodel/fonts/FontPitch.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/java/org/apache/poi/common/usermodel/fonts/FontPitch.java (original)
+++ poi/branches/hemf/src/java/org/apache/poi/common/usermodel/fonts/FontPitch.java Fri Nov 2 18:35:34 2018
@@ -59,6 +59,11 @@ public enum FontPitch {
* Combine pitch and family to native id
*
* @see <a href="https://msdn.microsoft.com/en-us/library/dd145037.aspx">LOGFONT structure</a>
+ *
+ * @param pitch The pitch-value, cannot be null
+ * @param family The family-value, cannot be null
+ *
+ * @return The resulting combined byte-value with pitch and family encoded into one byte
*/
public static byte getNativeId(FontPitch pitch, FontFamily family) {
return (byte)(pitch.getNativeId() | (family.getFlag() << 4));
@@ -66,9 +71,12 @@ public enum FontPitch {
/**
* Get FontPitch from native id
+ *
+ * @param pitchAndFamily The combined byte value for pitch and family
+ *
+ * @return The resulting FontPitch enumeration value
*/
public static FontPitch valueOfPitchFamily(byte pitchAndFamily) {
return valueOf(pitchAndFamily & 0x3);
}
}
-
Modified: poi/branches/hemf/src/java/org/apache/poi/extractor/OLE2ExtractorFactory.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/java/org/apache/poi/extractor/OLE2ExtractorFactory.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/java/org/apache/poi/extractor/OLE2ExtractorFactory.java (original)
+++ poi/branches/hemf/src/java/org/apache/poi/extractor/OLE2ExtractorFactory.java Fri Nov 2 18:35:34 2018
@@ -65,6 +65,8 @@ public final class OLE2ExtractorFactory
* Should this thread prefer event based over usermodel based extractors?
* (usermodel extractors tend to be more accurate, but use more memory)
* Default is false.
+ *
+ * @return true if event extractors should be preferred in the current thread, fals otherwise.
*/
public static boolean getThreadPrefersEventExtractors() {
return threadPreferEventExtractors.get();
@@ -74,6 +76,8 @@ public final class OLE2ExtractorFactory
* Should all threads prefer event based over usermodel based extractors?
* (usermodel extractors tend to be more accurate, but use more memory)
* Default is to use the thread level setting, which defaults to false.
+ *
+ * @return true if event extractors should be preferred in all threads, fals otherwise.
*/
public static Boolean getAllThreadsPreferEventExtractors() {
return allPreferEventExtractors;
@@ -82,6 +86,8 @@ public final class OLE2ExtractorFactory
/**
* Should this thread prefer event based over usermodel based extractors?
* Will only be used if the All Threads setting is null.
+ *
+ * @param preferEventExtractors If this threads should prefer event based extractors.
*/
public static void setThreadPrefersEventExtractors(boolean preferEventExtractors) {
threadPreferEventExtractors.set(preferEventExtractors);
@@ -90,6 +96,8 @@ public final class OLE2ExtractorFactory
/**
* Should all threads prefer event based over usermodel based extractors?
* If set, will take preference over the Thread level setting.
+ *
+ * @param preferEventExtractors If all threads should prefer event based extractors.
*/
public static void setAllThreadsPreferEventExtractors(Boolean preferEventExtractors) {
allPreferEventExtractors = preferEventExtractors;
@@ -98,6 +106,8 @@ public final class OLE2ExtractorFactory
/**
* Should this thread use event based extractors is available?
* Checks the all-threads one first, then thread specific.
+ *
+ * @return If the current thread should use event based extractors.
*/
public static boolean getPreferEventExtractor() {
if(allPreferEventExtractors != null) {
@@ -155,6 +165,16 @@ public final class OLE2ExtractorFactory
* Create the Extractor, if possible. Generally needs the Scratchpad jar.
* Note that this won't check for embedded OOXML resources either, use
* {@link org.apache.poi.ooxml.extractor.ExtractorFactory} for that.
+ *
+ * @param poifsDir The {@link DirectoryNode} pointing to a document.
+ *
+ * @return The resulting {@link POITextExtractor}, an exception is thrown if
+ * no TextExtractor can be created for some reason.
+ *
+ * @throws IOException If converting the {@link DirectoryNode} into a HSSFWorkbook fails
+ * @throws OldFileFormatException If the {@link DirectoryNode} points to a format of
+ * an unsupported version of Excel.
+ * @throws IllegalArgumentException If creating the Extractor fails
*/
public static POITextExtractor createExtractor(DirectoryNode poifsDir) throws IOException {
// Look for certain entries in the stream, to figure it
@@ -193,11 +213,17 @@ public final class OLE2ExtractorFactory
* If there are no embedded documents, you'll get back an
* empty array. Otherwise, you'll get one open
* {@link POITextExtractor} for each embedded file.
+ *
+ * @param ext The extractor to look at for embedded documents
+ *
+ * @return An array of resulting extractors. Empty if no embedded documents are found.
+ *
+ * @throws IOException If converting the {@link DirectoryNode} into a HSSFWorkbook fails
+ * @throws OldFileFormatException If the {@link DirectoryNode} points to a format of
+ * an unsupported version of Excel.
+ * @throws IllegalArgumentException If creating the Extractor fails
*/
- @SuppressWarnings("unused")
- public static POITextExtractor[] getEmbededDocsTextExtractors(POIOLE2TextExtractor ext)
- throws IOException
- {
+ public static POITextExtractor[] getEmbededDocsTextExtractors(POIOLE2TextExtractor ext) throws IOException {
// All the embedded directories we spotted
List<Entry> dirs = new ArrayList<>();
// For anything else not directly held in as a POIFS directory
@@ -237,13 +263,12 @@ public final class OLE2ExtractorFactory
ArrayList<POITextExtractor> e = new ArrayList<>();
for (Entry dir : dirs) {
- e.add(createExtractor(
- (DirectoryNode) dir
+ e.add(createExtractor((DirectoryNode) dir
));
}
- for (InputStream nonPOIF : nonPOIFS) {
+ for (InputStream stream : nonPOIFS) {
try {
- e.add(createExtractor(nonPOIF));
+ e.add(createExtractor(stream));
} catch (Exception xe) {
// Ignore, invalid format
LOGGER.log(POILogger.WARN, xe);
Modified: poi/branches/hemf/src/java/org/apache/poi/hpsf/Property.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/java/org/apache/poi/hpsf/Property.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/java/org/apache/poi/hpsf/Property.java (original)
+++ poi/branches/hemf/src/java/org/apache/poi/hpsf/Property.java Fri Nov 2 18:35:34 2018
@@ -248,12 +248,14 @@ public class Property {
/**
* Returns the property's size in bytes. This is always a multiple of 4.
*
+ * @param property The integer property to check
+ *
* @return the property's size in bytes
*
* @exception WritingNotSupportedException if HPSF does not yet support the
* property's variant type.
*/
- protected int getSize(int codepage) throws WritingNotSupportedException
+ protected int getSize(int property) throws WritingNotSupportedException
{
int length = Variant.getVariantLength(type);
if (length >= 0 || type == Variant.VT_EMPTY) {
@@ -269,16 +271,16 @@ public class Property {
if (type == Variant.VT_LPSTR || type == Variant.VT_LPWSTR) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
- length = write(bos, codepage) - 2*LittleEndianConsts.INT_SIZE;
+ length = write(bos, property) - 2*LittleEndianConsts.INT_SIZE;
/* Pad to multiples of 4. */
length += (4 - (length & 0x3)) & 0x3;
return length;
} catch (IOException e) {
- throw new WritingNotSupportedException(type, value);
+ throw new WritingNotSupportedException(type, this.value);
}
}
- throw new WritingNotSupportedException(type, value);
+ throw new WritingNotSupportedException(type, this.value);
}
Modified: poi/branches/hemf/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbookFactory.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbookFactory.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbookFactory.java (original)
+++ poi/branches/hemf/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbookFactory.java Fri Nov 2 18:35:34 2018
@@ -32,6 +32,15 @@ import org.apache.poi.util.Internal;
@Internal
public class HSSFWorkbookFactory extends WorkbookFactory {
/**
+ * Create a new empty Workbook
+ *
+ * @return The created workbook
+ */
+ public static HSSFWorkbook createWorkbook() {
+ return new HSSFWorkbook();
+ }
+
+ /**
* Creates a HSSFWorkbook from the given NPOIFSFileSystem<p>
* Note that in order to properly release resources the
* Workbook should be closed after use.
Modified: poi/branches/hemf/src/java/org/apache/poi/poifs/macros/VBAMacroReader.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/java/org/apache/poi/poifs/macros/VBAMacroReader.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/java/org/apache/poi/poifs/macros/VBAMacroReader.java (original)
+++ poi/branches/hemf/src/java/org/apache/poi/poifs/macros/VBAMacroReader.java Fri Nov 2 18:35:34 2018
@@ -20,9 +20,19 @@ package org.apache.poi.poifs.macros;
import static org.apache.poi.util.StringUtil.endsWithIgnoreCase;
import static org.apache.poi.util.StringUtil.startsWithIgnoreCase;
-import java.io.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.Closeable;
+import java.io.EOFException;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
@@ -39,6 +49,8 @@ import org.apache.poi.util.CodePageUtil;
import org.apache.poi.util.HexDump;
import org.apache.poi.util.IOUtils;
import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.POILogFactory;
+import org.apache.poi.util.POILogger;
import org.apache.poi.util.RLEDecompressingInputStream;
import org.apache.poi.util.StringUtil;
@@ -56,6 +68,10 @@ import org.apache.poi.util.StringUtil;
* @since 3.15-beta2
*/
public class VBAMacroReader implements Closeable {
+ private static final POILogger LOGGER = POILogFactory.getLogger(VBAMacroReader.class);
+
+ //arbitrary limit on size of strings to read, etc.
+ private static final int MAX_STRING_LENGTH = 20000;
protected static final String VBA_PROJECT_OOXML = "vbaProject.bin";
protected static final String VBA_PROJECT_POIFS = "VBA";
@@ -111,8 +127,13 @@ public class VBAMacroReader implements C
public Map<String, Module> readMacroModules() throws IOException {
final ModuleMap modules = new ModuleMap();
+ //ascii -> unicode mapping for module names
+ //preserve insertion order
+ final Map<String, String> moduleNameMap = new LinkedHashMap<>();
+
findMacros(fs.getRoot(), modules);
- findProjectProperties(fs.getRoot(), modules);
+ findModuleNameMap(fs.getRoot(), moduleNameMap, modules);
+ findProjectProperties(fs.getRoot(), moduleNameMap, modules);
Map<String, Module> moduleSources = new HashMap<>();
for (Map.Entry<String, ModuleImpl> entry : modules.entrySet()) {
@@ -327,19 +348,30 @@ public class VBAMacroReader implements C
}
}
- protected void findProjectProperties(DirectoryNode node, ModuleMap modules) throws IOException {
+ protected void findProjectProperties(DirectoryNode node, Map<String, String> moduleNameMap, ModuleMap modules) throws IOException {
for (Entry entry : node) {
if ("project".equalsIgnoreCase(entry.getName())) {
DocumentNode document = (DocumentNode)entry;
- DocumentInputStream dis = new DocumentInputStream(document);
- readProjectProperties(dis, modules);
- } else {
- for (Entry child : node) {
- if (child instanceof DirectoryNode) {
- findProjectProperties((DirectoryNode)child, modules);
- }
+ try(DocumentInputStream dis = new DocumentInputStream(document)) {
+ readProjectProperties(dis, moduleNameMap, modules);
+ return;
}
+ } else if (entry instanceof DirectoryNode) {
+ findProjectProperties((DirectoryNode)entry, moduleNameMap, modules);
+ }
+ }
+ }
+ protected void findModuleNameMap(DirectoryNode node, Map<String, String> moduleNameMap, ModuleMap modules) throws IOException {
+ for (Entry entry : node) {
+ if ("projectwm".equalsIgnoreCase(entry.getName())) {
+ DocumentNode document = (DocumentNode)entry;
+ try(DocumentInputStream dis = new DocumentInputStream(document)) {
+ readNameMapRecords(dis, moduleNameMap, modules.charset);
+ return;
+ }
+ } else if (entry.isDirectoryEntry()) {
+ findModuleNameMap((DirectoryNode)entry, moduleNameMap, modules);
}
}
}
@@ -426,10 +458,18 @@ public class VBAMacroReader implements C
private static class ASCIIUnicodeStringPair {
private final String ascii;
private final String unicode;
+ private final int pushbackRecordId;
+
+ ASCIIUnicodeStringPair(String ascii, int pushbackRecordId) {
+ this.ascii = ascii;
+ this.unicode = "";
+ this.pushbackRecordId = pushbackRecordId;
+ }
ASCIIUnicodeStringPair(String ascii, String unicode) {
this.ascii = ascii;
this.unicode = unicode;
+ pushbackRecordId = -1;
}
private String getAscii() {
@@ -439,6 +479,10 @@ public class VBAMacroReader implements C
private String getUnicode() {
return unicode;
}
+
+ private int getPushbackRecordId() {
+ return pushbackRecordId;
+ }
}
private void processDirStream(Entry dir, ModuleMap modules) throws IOException {
@@ -447,7 +491,7 @@ public class VBAMacroReader implements C
try (DocumentInputStream dis = new DocumentInputStream(dirDocumentNode)) {
String streamName = null;
int recordId = 0;
- boolean inReferenceTwiddled = false;
+
try (RLEDecompressingInputStream in = new RLEDecompressingInputStream(dis)) {
while (true) {
recordId = in.readShort();
@@ -485,7 +529,27 @@ public class VBAMacroReader implements C
if (dirState.equals(DIR_STATE.INFORMATION_RECORD)) {
dirState = DIR_STATE.REFERENCES_RECORD;
}
- readStringPair(in, modules.charset, REFERENCE_NAME_RESERVED);
+ ASCIIUnicodeStringPair stringPair = readStringPair(in,
+ modules.charset, REFERENCE_NAME_RESERVED, false);
+ if (stringPair.getPushbackRecordId() == -1) {
+ break;
+ }
+ //Special handling for when there's only an ascii string and a REFERENCED_REGISTERED
+ //record that follows.
+ //See https://github.com/decalage2/oletools/blob/master/oletools/olevba.py#L1516
+ //and https://github.com/decalage2/oletools/pull/135 from (@c1fe)
+ if (stringPair.getPushbackRecordId() != RecordType.REFERENCE_REGISTERED.id) {
+ throw new IllegalArgumentException("Unexpected reserved character. "+
+ "Expected "+Integer.toHexString(REFERENCE_NAME_RESERVED)
+ + " or "+Integer.toHexString(RecordType.REFERENCE_REGISTERED.id)+
+ " not: "+Integer.toHexString(stringPair.getPushbackRecordId()));
+ }
+ //fall through!
+ case REFERENCE_REGISTERED:
+ //REFERENCE_REGISTERED must come immediately after
+ //REFERENCE_NAME to allow for fall through in special case of bug 62625
+ int recLength = in.readInt();
+ trySkip(in, recLength);
break;
case MODULE_DOC_STRING:
int modDocStringLength = in.readInt();
@@ -546,19 +610,105 @@ public class VBAMacroReader implements C
}
}
- private ASCIIUnicodeStringPair readStringPair(RLEDecompressingInputStream in, Charset charset, int reservedByte) throws IOException {
+
+
+ private ASCIIUnicodeStringPair readStringPair(RLEDecompressingInputStream in,
+ Charset charset, int reservedByte) throws IOException {
+ return readStringPair(in, charset, reservedByte, true);
+ }
+
+ private ASCIIUnicodeStringPair readStringPair(RLEDecompressingInputStream in,
+ Charset charset, int reservedByte,
+ boolean throwOnUnexpectedReservedByte) throws IOException {
int nameLength = in.readInt();
String ascii = readString(in, nameLength, charset);
int reserved = in.readShort();
+
if (reserved != reservedByte) {
- throw new IOException("Expected "+Integer.toHexString(reservedByte)+ "after name before Unicode name, but found: " +
- Integer.toHexString(reserved));
+ if (throwOnUnexpectedReservedByte) {
+ throw new IOException("Expected " + Integer.toHexString(reservedByte) +
+ "after name before Unicode name, but found: " +
+ Integer.toHexString(reserved));
+ } else {
+ return new ASCIIUnicodeStringPair(ascii, reserved);
+ }
}
int unicodeNameRecordLength = in.readInt();
String unicode = readUnicodeString(in, unicodeNameRecordLength);
return new ASCIIUnicodeStringPair(ascii, unicode);
}
+ protected void readNameMapRecords(InputStream is,
+ Map<String, String> moduleNames, Charset charset) throws IOException {
+ //see 2.3.3 PROJECTwm Stream: Module Name Information
+ //multibytecharstring
+ String mbcs = null;
+ String unicode = null;
+ //arbitrary sanity threshold
+ final int maxNameRecords = 10000;
+ int records = 0;
+ while (++records < maxNameRecords) {
+ try {
+ int b = IOUtils.readByte(is);
+ //check for two 0x00 that mark end of record
+ if (b == 0) {
+ b = IOUtils.readByte(is);
+ if (b == 0) {
+ return;
+ }
+ }
+ mbcs = readMBCS(b, is, charset, MAX_STRING_LENGTH);
+ } catch (EOFException e) {
+ return;
+ }
+
+ try {
+ unicode = readUnicode(is, MAX_STRING_LENGTH);
+ } catch (EOFException e) {
+ return;
+ }
+ if (mbcs.trim().length() > 0 && unicode.trim().length() > 0) {
+ moduleNames.put(mbcs, unicode);
+ }
+
+ }
+ if (records >= maxNameRecords) {
+ LOGGER.log(POILogger.WARN, "Hit max name records to read ("+maxNameRecords+"). Stopped early.");
+ }
+ }
+
+ private static String readUnicode(InputStream is, int maxLength) throws IOException {
+ //reads null-terminated unicode string
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ int b0 = IOUtils.readByte(is);
+ int b1 = IOUtils.readByte(is);
+
+ int read = 2;
+ while ((b0 + b1) != 0 && read < maxLength) {
+
+ bos.write(b0);
+ bos.write(b1);
+ b0 = IOUtils.readByte(is);
+ b1 = IOUtils.readByte(is);
+ read += 2;
+ }
+ if (read >= maxLength) {
+ LOGGER.log(POILogger.WARN, "stopped reading unicode name after "+read+" bytes");
+ }
+ return new String (bos.toByteArray(), StandardCharsets.UTF_16LE);
+ }
+
+ private static String readMBCS(int firstByte, InputStream is, Charset charset, int maxLength) throws IOException {
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ int len = 0;
+ int b = firstByte;
+ while (b > 0 && len < maxLength) {
+ ++len;
+ bos.write(b);
+ b = IOUtils.readByte(is);
+ }
+ return new String(bos.toByteArray(), charset);
+ }
/**
* Read <tt>length</tt> bytes of MBCS (multi-byte character set) characters from the stream
@@ -570,7 +720,7 @@ public class VBAMacroReader implements C
* @throws IOException If reading from the stream fails
*/
private static String readString(InputStream stream, int length, Charset charset) throws IOException {
- byte[] buffer = IOUtils.safelyAllocate(length, 20000);
+ byte[] buffer = IOUtils.safelyAllocate(length, MAX_STRING_LENGTH);
int bytesRead = IOUtils.readFully(stream, buffer);
if (bytesRead != length) {
throw new IOException("Tried to read: "+length +
@@ -579,7 +729,8 @@ public class VBAMacroReader implements C
return new String(buffer, 0, length, charset);
}
- protected void readProjectProperties(DocumentInputStream dis, ModuleMap modules) throws IOException {
+ protected void readProjectProperties(DocumentInputStream dis,
+ Map<String, String> moduleNameMap, ModuleMap modules) throws IOException {
InputStreamReader reader = new InputStreamReader(dis, modules.charset);
StringBuilder builder = new StringBuilder();
char[] buffer = new char[512];
@@ -588,6 +739,9 @@ public class VBAMacroReader implements C
builder.append(buffer, 0, read);
}
String properties = builder.toString();
+ //the module name map names should be in exactly the same order
+ //as the module names here. See 2.3.3 PROJECTwm Stream.
+ //At some point, we might want to enforce that.
for (String line : properties.split("\r\n|\n\r")) {
if (!line.startsWith("[")) {
String[] tokens = line.split("=");
@@ -595,28 +749,46 @@ public class VBAMacroReader implements C
&& tokens[1].startsWith("\"") && tokens[1].endsWith("\"")) {
// Remove any double quotes
tokens[1] = tokens[1].substring(1, tokens[1].length() - 1);
-
}
- if ("Document".equals(tokens[0])) {
+ if ("Document".equals(tokens[0]) && tokens.length > 1) {
String mn = tokens[1].substring(0, tokens[1].indexOf("/&H"));
- ModuleImpl module = modules.get(mn);
- module.moduleType = ModuleType.Document;
- } else if ("Module".equals(tokens[0])) {
- ModuleImpl module = modules.get(tokens[1]);
- module.moduleType = ModuleType.Module;
- } else if ("Class".equals(tokens[0])) {
- ModuleImpl module = modules.get(tokens[1]);
- module.moduleType = ModuleType.Class;
+ ModuleImpl module = getModule(mn, moduleNameMap, modules);
+ if (module != null) {
+ module.moduleType = ModuleType.Document;
+ } else {
+ LOGGER.log(POILogger.WARN, "couldn't find module with name: "+mn);
+ }
+ } else if ("Module".equals(tokens[0]) && tokens.length > 1) {
+ ModuleImpl module = getModule(tokens[1], moduleNameMap, modules);
+ if (module != null) {
+ module.moduleType = ModuleType.Module;
+ } else {
+ LOGGER.log(POILogger.WARN, "couldn't find module with name: "+tokens[1]);
+ }
+ } else if ("Class".equals(tokens[0]) && tokens.length > 1) {
+ ModuleImpl module = getModule(tokens[1], moduleNameMap, modules);
+ if (module != null) {
+ module.moduleType = ModuleType.Class;
+ } else {
+ LOGGER.log(POILogger.WARN, "couldn't find module with name: "+tokens[1]);
+ }
}
}
}
}
+ //can return null!
+ private ModuleImpl getModule(String moduleName, Map<String, String> moduleNameMap, ModuleMap moduleMap) {
+ if (moduleNameMap.containsKey(moduleName)) {
+ return moduleMap.get(moduleNameMap.get(moduleName));
+ }
+ return moduleMap.get(moduleName);
+ }
private String readUnicodeString(RLEDecompressingInputStream in, int unicodeNameRecordLength) throws IOException {
- byte[] buffer = IOUtils.safelyAllocate(unicodeNameRecordLength, 20000);
+ byte[] buffer = IOUtils.safelyAllocate(unicodeNameRecordLength, MAX_STRING_LENGTH);
int bytesRead = IOUtils.readFully(in, buffer);
if (bytesRead != unicodeNameRecordLength) {
-
+ throw new EOFException();
}
return new String(buffer, StringUtil.UTF16LE);
}
Modified: poi/branches/hemf/src/java/org/apache/poi/ss/format/CellDateFormatter.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/java/org/apache/poi/ss/format/CellDateFormatter.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/java/org/apache/poi/ss/format/CellDateFormatter.java (original)
+++ poi/branches/hemf/src/java/org/apache/poi/ss/format/CellDateFormatter.java Fri Nov 2 18:35:34 2018
@@ -50,6 +50,7 @@ public class CellDateFormatter extends C
private int hStart = -1;
private int hLen;
+ @Override
public String handlePart(Matcher m, String part, CellFormatType type,
StringBuffer desc) {
Modified: poi/branches/hemf/src/java/org/apache/poi/ss/format/CellTextFormatter.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/java/org/apache/poi/ss/format/CellTextFormatter.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/java/org/apache/poi/ss/format/CellTextFormatter.java (original)
+++ poi/branches/hemf/src/java/org/apache/poi/ss/format/CellTextFormatter.java Fri Nov 2 18:35:34 2018
@@ -16,10 +16,7 @@
==================================================================== */
package org.apache.poi.ss.format;
-import org.apache.poi.ss.format.CellFormatPart.PartHandler;
-
import java.util.Locale;
-import java.util.regex.Matcher;
/**
* This class implements printing out text.
@@ -38,15 +35,12 @@ public class CellTextFormatter extends C
final int[] numPlaces = new int[1];
desc = CellFormatPart.parseFormat(format, CellFormatType.TEXT,
- new PartHandler() {
- public String handlePart(Matcher m, String part,
- CellFormatType type, StringBuffer desc) {
- if (part.equals("@")) {
- numPlaces[0]++;
- return "\u0000";
- }
- return null;
+ (m, part, type, desc) -> {
+ if (part.equals("@")) {
+ numPlaces[0]++;
+ return "\u0000";
}
+ return null;
}).toString();
// Remember the "@" positions in last-to-first order (to make insertion easier)
@@ -66,8 +60,8 @@ public class CellTextFormatter extends C
text = text.toUpperCase(Locale.ROOT);
}
toAppendTo.append(desc);
- for (int i = 0; i < textPos.length; i++) {
- int pos = start + textPos[i];
+ for (int textPo : textPos) {
+ int pos = start + textPo;
toAppendTo.replace(pos, pos + 1, text);
}
}
Modified: poi/branches/hemf/src/java/org/apache/poi/ss/formula/BaseFormulaEvaluator.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/java/org/apache/poi/ss/formula/BaseFormulaEvaluator.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/java/org/apache/poi/ss/formula/BaseFormulaEvaluator.java (original)
+++ poi/branches/hemf/src/java/org/apache/poi/ss/formula/BaseFormulaEvaluator.java Fri Nov 2 18:35:34 2018
@@ -65,6 +65,14 @@ public abstract class BaseFormulaEvaluat
}
/**
+ * internal use
+ * @return evaluation workbook
+ */
+ protected EvaluationWorkbook getEvaluationWorkbook() {
+ return _bookEvaluator.getWorkbook();
+ }
+
+ /**
* Should be called whenever there are major changes (e.g. moving sheets) to input cells
* in the evaluated workbook. If performance is not critical, a single call to this method
* may be used instead of many specific calls to the notify~ methods.
@@ -208,14 +216,19 @@ public abstract class BaseFormulaEvaluat
return evaluateFormulaCell(cell);
}
- protected static void setCellType(Cell cell, CellValue cv) {
+ /**
+ * set the cell type
+ * @param cell
+ * @param cv
+ */
+ protected void setCellType(Cell cell, CellValue cv) {
CellType cellType = cv.getCellType();
switch (cellType) {
case BOOLEAN:
case ERROR:
case NUMERIC:
case STRING:
- cell.setCellType(cellType);
+ setCellType(cell, cellType);
return;
case BLANK:
// never happens - blanks eventually get translated to zero
@@ -227,6 +240,15 @@ public abstract class BaseFormulaEvaluat
throw new IllegalStateException("Unexpected cell value type (" + cellType + ")");
}
}
+
+ /**
+ * Override if a different variation is needed, e.g. passing the evaluator to the cell method
+ * @param cell
+ * @param cellType
+ */
+ protected void setCellType(Cell cell, CellType cellType) {
+ cell.setCellType(cellType);
+ }
protected abstract RichTextString createRichTextString(String str);
Modified: poi/branches/hemf/src/java/org/apache/poi/ss/formula/eval/FunctionEval.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/java/org/apache/poi/ss/formula/eval/FunctionEval.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/java/org/apache/poi/ss/formula/eval/FunctionEval.java (original)
+++ poi/branches/hemf/src/java/org/apache/poi/ss/formula/eval/FunctionEval.java Fri Nov 2 18:35:34 2018
@@ -115,7 +115,7 @@ public final class FunctionEval {
// 47: DVAR
retval[48] = TextFunction.TEXT;
// 49: LINEST
- // 50: TREND
+ retval[50] = new Trend();
// 51: LOGEST
// 52: GROWTH
@@ -243,7 +243,8 @@ public final class FunctionEval {
// 247: DB
// 252: FEQUENCY
-
+ retval[252] = Frequency.instance;
+
retval[FunctionID.EXTERNAL_FUNC] = null; // ExternalFunction is a FreeRefFunction, nominally 255
retval[261] = new Errortype();
Modified: poi/branches/hemf/src/java/org/apache/poi/ss/formula/ptg/RefPtgBase.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/java/org/apache/poi/ss/formula/ptg/RefPtgBase.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/java/org/apache/poi/ss/formula/ptg/RefPtgBase.java (original)
+++ poi/branches/hemf/src/java/org/apache/poi/ss/formula/ptg/RefPtgBase.java Fri Nov 2 18:35:34 2018
@@ -43,7 +43,7 @@ public abstract class RefPtgBase extends
/**
* YK: subclasses of RefPtgBase are used by the FormulaParser and FormulaEvaluator accross HSSF and XSSF.
- * The bit mask should accomodate the maximum number of avaiable columns, i.e. 0x3FFF.
+ * The bit mask should accommodate the maximum number of avaiable columns, i.e. 0x3FFF.
*
* @see org.apache.poi.ss.SpreadsheetVersion
*/
Modified: poi/branches/hemf/src/java/org/apache/poi/ss/usermodel/Sheet.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/java/org/apache/poi/ss/usermodel/Sheet.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/java/org/apache/poi/ss/usermodel/Sheet.java (original)
+++ poi/branches/hemf/src/java/org/apache/poi/ss/usermodel/Sheet.java Fri Nov 2 18:35:34 2018
@@ -1006,7 +1006,10 @@ public interface Sheet extends Iterable<
/**
* Sets array formula to specified region for result.
- *
+ * <p>
+ * Note if there are shared formulas this will invalidate any
+ * {@link FormulaEvaluator} instances based on this workbook
+ *</p>
* @param formula text representation of the formula
* @param range Region of array formula for result.
* @return the {@link CellRange} of cells affected by this change
Modified: poi/branches/hemf/src/java/org/apache/poi/ss/usermodel/WorkbookFactory.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/java/org/apache/poi/ss/usermodel/WorkbookFactory.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/java/org/apache/poi/ss/usermodel/WorkbookFactory.java (original)
+++ poi/branches/hemf/src/java/org/apache/poi/ss/usermodel/WorkbookFactory.java Fri Nov 2 18:35:34 2018
@@ -44,6 +44,24 @@ import org.apache.poi.util.Removal;
*/
public class WorkbookFactory {
/**
+ * Create a new empty Workbook, either XSSF or HSSF depending
+ * on the parameter
+ *
+ * @param xssf If an XSSFWorkbook or a HSSFWorkbook should be created
+ *
+ * @return The created workbook
+ *
+ * @throws IOException if an error occurs while reading the data
+ */
+ public static Workbook create(boolean xssf) throws IOException {
+ if(xssf) {
+ return createXSSFWorkbook();
+ } else {
+ return createHSSFWorkbook();
+ }
+ }
+
+ /**
* Creates a HSSFWorkbook from the given NPOIFSFileSystem<p>
*
* Note that in order to properly release resources the
@@ -296,6 +314,11 @@ public class WorkbookFactory {
return createWorkbook("org.apache.poi.xssf.usermodel.XSSFWorkbookFactory", args);
}
+ /**
+ * Does the actual call to HSSF or XSSF to do the creation.
+ * Uses reflection, so that this class can be in the Core non-OOXML
+ * POI jar without errors / broken references to the OOXML / XSSF code.
+ */
private static Workbook createWorkbook(String factoryClass, Object args[]) throws IOException, EncryptedDocumentException {
try {
Class<?> clazz = WorkbookFactory.class.getClassLoader().loadClass(factoryClass);
@@ -307,6 +330,8 @@ public class WorkbookFactory {
c = boolean.class;
} else if (InputStream.class.isAssignableFrom(c)) {
c = InputStream.class;
+ } else if (File.class.isAssignableFrom(c)) {
+ c = File.class;
}
argsClz[i++] = c;
}
Modified: poi/branches/hemf/src/java/org/apache/poi/ss/util/CellReference.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/java/org/apache/poi/ss/util/CellReference.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/java/org/apache/poi/ss/util/CellReference.java (original)
+++ poi/branches/hemf/src/java/org/apache/poi/ss/util/CellReference.java Fri Nov 2 18:35:34 2018
@@ -132,7 +132,7 @@ public class CellReference {
if (rowRef.length() == 0) {
_rowIndex = -1;
} else {
- // throws NumberFormatException if rowRef is not convertable to an int
+ // throws NumberFormatException if rowRef is not convertible to an int
_rowIndex = Integer.parseInt(rowRef)-1; // -1 to convert 1-based to zero-based
}
}
@@ -336,10 +336,10 @@ public class CellReference {
if(colStr.toUpperCase(Locale.ROOT).compareTo(lastCol) > 0) {
return false;
}
- } else {
+ } /*else {
// apparent column name has less chars than max
// no need to check range
- }
+ }*/
return true;
}
@@ -426,7 +426,7 @@ public class CellReference {
// AreaReference.separateAreaRefs()
// SheetNameFormatter.format() (inverse)
- StringBuffer sb = new StringBuffer(indexOfSheetNameDelimiter);
+ StringBuilder sb = new StringBuilder(indexOfSheetNameDelimiter);
for(int i=1; i<lastQuotePos; i++) { // Note boundaries - skip outer quotes
char ch = reference.charAt(i);
@@ -495,11 +495,7 @@ public class CellReference {
@Override
public String toString() {
- StringBuffer sb = new StringBuffer(64);
- sb.append(getClass().getName()).append(" [");
- sb.append(formatAsString());
- sb.append("]");
- return sb.toString();
+ return getClass().getName() + " [" + formatAsString() + "]";
}
/**
Modified: poi/branches/hemf/src/java/org/apache/poi/ss/util/CellUtil.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/java/org/apache/poi/ss/util/CellUtil.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/java/org/apache/poi/ss/util/CellUtil.java (original)
+++ poi/branches/hemf/src/java/org/apache/poi/ss/util/CellUtil.java Fri Nov 2 18:35:34 2018
@@ -420,7 +420,7 @@ public final class CellUtil {
}
/**
- * Utility method that returns the named short value form the given map.
+ * Utility method that returns the named short value from the given map.
*
* @param properties map of named properties (String -> Object)
* @param name property name
@@ -436,7 +436,7 @@ public final class CellUtil {
}
/**
- * Utility method that returns the named int value form the given map.
+ * Utility method that returns the named int value from the given map.
*
* @param properties map of named properties (String -> Object)
* @param name property name
@@ -452,7 +452,7 @@ public final class CellUtil {
}
/**
- * Utility method that returns the named BorderStyle value form the given map.
+ * Utility method that returns the named BorderStyle value from the given map.
*
* @param properties map of named properties (String -> Object)
* @param name property name
@@ -483,7 +483,7 @@ public final class CellUtil {
}
/**
- * Utility method that returns the named FillPatternType value form the given map.
+ * Utility method that returns the named FillPatternType value from the given map.
*
* @param properties map of named properties (String -> Object)
* @param name property name
@@ -515,7 +515,7 @@ public final class CellUtil {
}
/**
- * Utility method that returns the named HorizontalAlignment value form the given map.
+ * Utility method that returns the named HorizontalAlignment value from the given map.
*
* @param properties map of named properties (String -> Object)
* @param name property name
@@ -547,7 +547,7 @@ public final class CellUtil {
}
/**
- * Utility method that returns the named VerticalAlignment value form the given map.
+ * Utility method that returns the named VerticalAlignment value from the given map.
*
* @param properties map of named properties (String -> Object)
* @param name property name
@@ -579,7 +579,7 @@ public final class CellUtil {
}
/**
- * Utility method that returns the named boolean value form the given map.
+ * Utility method that returns the named boolean value from the given map.
*
* @param properties map of properties (String -> Object)
* @param name property name
@@ -594,7 +594,7 @@ public final class CellUtil {
}
return false;
}
-
+
/**
* Utility method that puts the given value to the given map.
*
Modified: poi/branches/hemf/src/java/org/apache/poi/util/IOUtils.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/java/org/apache/poi/util/IOUtils.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/java/org/apache/poi/util/IOUtils.java (original)
+++ poi/branches/hemf/src/java/org/apache/poi/util/IOUtils.java Fri Nov 2 18:35:34 2018
@@ -571,6 +571,22 @@ public final class IOUtils {
return new byte[(int)length];
}
+ /**
+ * Simple utility function to check that you haven't hit EOF
+ * when reading a byte.
+ *
+ * @param is inputstream to read
+ * @return byte read, unless
+ * @throws IOException on IOException or EOF if -1 is read
+ */
+ public static int readByte(InputStream is) throws IOException {
+ int b = is.read();
+ if (b == -1) {
+ throw new EOFException();
+ }
+ return b;
+ }
+
private static void throwRFE(long length, int maxLength) {
throw new RecordFormatException("Tried to allocate an array of length "+length +
", but "+ maxLength+" is the maximum for this record type.\n" +
Modified: poi/branches/hemf/src/ooxml/java/org/apache/poi/ooxml/POIXMLDocumentPart.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/ooxml/java/org/apache/poi/ooxml/POIXMLDocumentPart.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/ooxml/java/org/apache/poi/ooxml/POIXMLDocumentPart.java (original)
+++ poi/branches/hemf/src/ooxml/java/org/apache/poi/ooxml/POIXMLDocumentPart.java Fri Nov 2 18:35:34 2018
@@ -42,6 +42,7 @@ import org.apache.poi.util.POILogger;
import org.apache.poi.xddf.usermodel.chart.XDDFChart;
import org.apache.poi.xssf.usermodel.XSSFRelation;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.poi.xwpf.usermodel.XWPFRelation;
/**
* Represents an entry of a OOXML package.
@@ -613,6 +614,14 @@ public class POIXMLDocumentPart {
*/
protected void read(POIXMLFactory factory, Map<PackagePart, POIXMLDocumentPart> context) throws OpenXML4JException {
PackagePart pp = getPackagePart();
+
+ if (pp.getContentType().equals(XWPFRelation.TEMPLATE.getContentType())) {
+ logger.log(POILogger.WARN,
+ "POI does not currently support template.main+xml (glossary) parts. " +
+ "Skipping this part for now.");
+ return;
+ }
+
// add mapping a second time, in case of initial caller hasn't done so
POIXMLDocumentPart otherChild = context.put(pp, this);
if (otherChild != null && otherChild != this) {
Modified: poi/branches/hemf/src/ooxml/java/org/apache/poi/openxml4j/exceptions/InvalidFormatException.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/ooxml/java/org/apache/poi/openxml4j/exceptions/InvalidFormatException.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/ooxml/java/org/apache/poi/openxml4j/exceptions/InvalidFormatException.java (original)
+++ poi/branches/hemf/src/ooxml/java/org/apache/poi/openxml4j/exceptions/InvalidFormatException.java Fri Nov 2 18:35:34 2018
@@ -18,7 +18,7 @@
package org.apache.poi.openxml4j.exceptions;
@SuppressWarnings("serial")
-public final class InvalidFormatException extends OpenXML4JException{
+public final class InvalidFormatException extends OpenXML4JException {
public InvalidFormatException(String message){
super(message);
Modified: poi/branches/hemf/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java?rev=1845617&r1=1845616&r2=1845617&view=diff
==============================================================================
--- poi/branches/hemf/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java (original)
+++ poi/branches/hemf/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java Fri Nov 2 18:35:34 2018
@@ -291,6 +291,8 @@ public abstract class OPCPackage impleme
* @param in
* The InputStream to read the package from
* @return A PackageBase object
+ *
+ * @throws InvalidFormatException
*/
public static OPCPackage open(InputStream in) throws InvalidFormatException,
IOException {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org