git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1730543 13f79535-47bb-0310-9956-ffa450edef68tags/REL_3_14_FINAL
@@ -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 = |
@@ -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; | |||
} |
@@ -4133,7 +4133,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { | |||
Map<IgnoredErrorType, Set<CellRangeAddress>> result = new LinkedHashMap<IgnoredErrorType, Set<CellRangeAddress>>(); | |||
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<CellRangeAddress>()); | |||
} | |||
@@ -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<IgnoredErrorType> getErrorTypes(CTIgnoredError err) { | |||
Set<IgnoredErrorType> result = new LinkedHashSet<IgnoredErrorType>(); | |||
for (IgnoredErrorType errType : IgnoredErrorType.values()) { | |||
if (XSSFIgnoredErrorHelper.isSet(errType, err)) { | |||
result.add(errType); | |||
} | |||
} | |||
return result; | |||
} | |||
} |
@@ -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<IgnoredErrorType> getErrorTypes(CTIgnoredError err) { | |||
Set<IgnoredErrorType> result = new LinkedHashSet<IgnoredErrorType>(); | |||
for (IgnoredErrorType errType : IgnoredErrorType.values()) { | |||
if (XSSFIgnoredErrorHelper.isSet(errType, err)) { | |||
result.add(errType); | |||
} | |||
} | |||
return result; | |||
} | |||
} |
@@ -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; |