From: Nick Burch Date: Mon, 15 Feb 2016 14:58:16 +0000 (+0000) Subject: Add details of the ignored errors where the HSSF spec provides a good description... X-Git-Tag: REL_3_14_FINAL~35 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=8c203f136623bbf343972f581a22a18a4121693d;p=poi.git Add details of the ignored errors where the HSSF spec provides a good description, and a bit more refactoring. #56892 git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1730543 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/java/org/apache/poi/hssf/record/common/FeatFormulaErr2.java b/src/java/org/apache/poi/hssf/record/common/FeatFormulaErr2.java index b3a9a96ad4..866c311fcf 100644 --- a/src/java/org/apache/poi/hssf/record/common/FeatFormulaErr2.java +++ b/src/java/org/apache/poi/hssf/record/common/FeatFormulaErr2.java @@ -32,7 +32,8 @@ import org.apache.poi.util.LittleEndianOutput; * for a sheet, stored as part of a Shared Feature. It can be found in * records such as {@link FeatRecord}. * For the full meanings of the flags, see pages 669 and 670 - * of the Excel binary file format documentation. + * of the Excel binary file format documentation and/or + * https://msdn.microsoft.com/en-us/library/dd924991%28v=office.12%29.aspx */ public final class FeatFormulaErr2 implements SharedFeature { static BitField checkCalculationErrors = diff --git a/src/java/org/apache/poi/ss/usermodel/IgnoredErrorType.java b/src/java/org/apache/poi/ss/usermodel/IgnoredErrorType.java index 183fe29f29..9939ec1cd7 100644 --- a/src/java/org/apache/poi/ss/usermodel/IgnoredErrorType.java +++ b/src/java/org/apache/poi/ss/usermodel/IgnoredErrorType.java @@ -17,29 +17,67 @@ package org.apache.poi.ss.usermodel; - /** * Types of ignored workbook and worksheet error. * - * TODO Give more details on what these mean + * TODO Implement these for HSSF too, using FeatFormulaErr2, + * see bugzilla bug #46136 for details */ public enum IgnoredErrorType { - + /** + * ????. Probably XSSF-only. + */ CALCULATED_COLUMN, + /** + * Whether to check for references to empty cells. + * HSSF + XSSF. + */ EMPTY_CELL_REFERENCE, + /** + * Whether to check for calculation/evaluation errors. + * HSSF + XSSF. + */ EVALUATION_ERROR, + /** + * Whether to check formulas in the range of the shared feature + * that are inconsistent with formulas in neighbouring cells. + * HSSF + XSSF. + */ FORMULA, + /** + * Whether to check formulas in the range of the shared feature + * with references to less than the entirety of a range containing + * continuous data. + * HSSF + XSSF. + */ FORMULA_RANGE, + /** + * ????. Is this XSSF-specific the same as performDataValidation + * in HSSF? + */ LIST_DATA_VALIDATION, + /** + * Whether to check the format of string values and warn + * if they look to actually be numeric values. + * HSSF + XSSF. + */ NUMBER_STORED_AS_TEXT, + /** + * ????. Is this XSSF-specific the same as checkDateTimeFormats + * in HSSF? + */ TWO_DIGIT_TEXT_YEAR, + /** + * Whether to check for unprotected formulas. + * HSSF + XSSF. + */ UNLOCKED_FORMULA; } diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java index 40d765a1da..ee83e78c69 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java @@ -4133,7 +4133,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { Map> result = new LinkedHashMap>(); if (worksheet.isSetIgnoredErrors()) { for (CTIgnoredError err : worksheet.getIgnoredErrors().getIgnoredErrorList()) { - for (IgnoredErrorType errType : getErrorTypes(err)) { + for (IgnoredErrorType errType : XSSFIgnoredErrorHelper.getErrorTypes(err)) { if (!result.containsKey(errType)) { result.put(errType, new LinkedHashSet()); } @@ -4149,20 +4149,6 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { private void addIgnoredErrors(String ref, IgnoredErrorType... ignoredErrorTypes) { CTIgnoredErrors ctIgnoredErrors = worksheet.isSetIgnoredErrors() ? worksheet.getIgnoredErrors() : worksheet.addNewIgnoredErrors(); CTIgnoredError ctIgnoredError = ctIgnoredErrors.addNewIgnoredError(); - ctIgnoredError.setSqref(Arrays.asList(ref)); - for (IgnoredErrorType errType : ignoredErrorTypes) { - XSSFIgnoredErrorHelper.set(errType, ctIgnoredError); - } + XSSFIgnoredErrorHelper.addIgnoredErrors(ctIgnoredError, ref, ignoredErrorTypes); } - - private Set getErrorTypes(CTIgnoredError err) { - Set result = new LinkedHashSet(); - for (IgnoredErrorType errType : IgnoredErrorType.values()) { - if (XSSFIgnoredErrorHelper.isSet(errType, err)) { - result.add(errType); - } - } - return result; - } - } diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/XSSFIgnoredErrorHelper.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/XSSFIgnoredErrorHelper.java index 4911a3532d..d0dc0b7606 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/XSSFIgnoredErrorHelper.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/XSSFIgnoredErrorHelper.java @@ -17,8 +17,12 @@ package org.apache.poi.xssf.usermodel.helpers; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTIgnoredError; +import java.util.Arrays; +import java.util.LinkedHashSet; +import java.util.Set; + import org.apache.poi.ss.usermodel.IgnoredErrorType; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTIgnoredError; /** * XSSF-specific code for working with ignored errors @@ -82,4 +86,21 @@ public class XSSFIgnoredErrorHelper { throw new IllegalStateException(); } } + + public static void addIgnoredErrors(CTIgnoredError err, String ref, IgnoredErrorType... ignoredErrorTypes) { + err.setSqref(Arrays.asList(ref)); + for (IgnoredErrorType errType : ignoredErrorTypes) { + XSSFIgnoredErrorHelper.set(errType, err); + } + } + + public static Set getErrorTypes(CTIgnoredError err) { + Set result = new LinkedHashSet(); + for (IgnoredErrorType errType : IgnoredErrorType.values()) { + if (XSSFIgnoredErrorHelper.isSet(errType, err)) { + result.add(errType); + } + } + return result; + } } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java index 158cc75018..f5ad27c815 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java @@ -49,6 +49,7 @@ import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellCopyPolicy; import org.apache.poi.ss.usermodel.ClientAnchor; import org.apache.poi.ss.usermodel.FormulaError; +import org.apache.poi.ss.usermodel.IgnoredErrorType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook;