mirror of https://github.com/apache/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
This commit is contained in:
parent
3b5586ea79
commit
8c203f1366
|
@ -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
|
* for a sheet, stored as part of a Shared Feature. It can be found in
|
||||||
* records such as {@link FeatRecord}.
|
* records such as {@link FeatRecord}.
|
||||||
* For the full meanings of the flags, see pages 669 and 670
|
* 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 {
|
public final class FeatFormulaErr2 implements SharedFeature {
|
||||||
static BitField checkCalculationErrors =
|
static BitField checkCalculationErrors =
|
||||||
|
|
|
@ -17,29 +17,67 @@
|
||||||
|
|
||||||
package org.apache.poi.ss.usermodel;
|
package org.apache.poi.ss.usermodel;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Types of ignored workbook and worksheet error.
|
* 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 {
|
public enum IgnoredErrorType {
|
||||||
|
/**
|
||||||
|
* ????. Probably XSSF-only.
|
||||||
|
*/
|
||||||
CALCULATED_COLUMN,
|
CALCULATED_COLUMN,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether to check for references to empty cells.
|
||||||
|
* HSSF + XSSF.
|
||||||
|
*/
|
||||||
EMPTY_CELL_REFERENCE,
|
EMPTY_CELL_REFERENCE,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether to check for calculation/evaluation errors.
|
||||||
|
* HSSF + XSSF.
|
||||||
|
*/
|
||||||
EVALUATION_ERROR,
|
EVALUATION_ERROR,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether to check formulas in the range of the shared feature
|
||||||
|
* that are inconsistent with formulas in neighbouring cells.
|
||||||
|
* HSSF + XSSF.
|
||||||
|
*/
|
||||||
FORMULA,
|
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,
|
FORMULA_RANGE,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ????. Is this XSSF-specific the same as performDataValidation
|
||||||
|
* in HSSF?
|
||||||
|
*/
|
||||||
LIST_DATA_VALIDATION,
|
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,
|
NUMBER_STORED_AS_TEXT,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ????. Is this XSSF-specific the same as checkDateTimeFormats
|
||||||
|
* in HSSF?
|
||||||
|
*/
|
||||||
TWO_DIGIT_TEXT_YEAR,
|
TWO_DIGIT_TEXT_YEAR,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether to check for unprotected formulas.
|
||||||
|
* HSSF + XSSF.
|
||||||
|
*/
|
||||||
UNLOCKED_FORMULA;
|
UNLOCKED_FORMULA;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4133,7 +4133,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
|
||||||
Map<IgnoredErrorType, Set<CellRangeAddress>> result = new LinkedHashMap<IgnoredErrorType, Set<CellRangeAddress>>();
|
Map<IgnoredErrorType, Set<CellRangeAddress>> result = new LinkedHashMap<IgnoredErrorType, Set<CellRangeAddress>>();
|
||||||
if (worksheet.isSetIgnoredErrors()) {
|
if (worksheet.isSetIgnoredErrors()) {
|
||||||
for (CTIgnoredError err : worksheet.getIgnoredErrors().getIgnoredErrorList()) {
|
for (CTIgnoredError err : worksheet.getIgnoredErrors().getIgnoredErrorList()) {
|
||||||
for (IgnoredErrorType errType : getErrorTypes(err)) {
|
for (IgnoredErrorType errType : XSSFIgnoredErrorHelper.getErrorTypes(err)) {
|
||||||
if (!result.containsKey(errType)) {
|
if (!result.containsKey(errType)) {
|
||||||
result.put(errType, new LinkedHashSet<CellRangeAddress>());
|
result.put(errType, new LinkedHashSet<CellRangeAddress>());
|
||||||
}
|
}
|
||||||
|
@ -4149,20 +4149,6 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
|
||||||
private void addIgnoredErrors(String ref, IgnoredErrorType... ignoredErrorTypes) {
|
private void addIgnoredErrors(String ref, IgnoredErrorType... ignoredErrorTypes) {
|
||||||
CTIgnoredErrors ctIgnoredErrors = worksheet.isSetIgnoredErrors() ? worksheet.getIgnoredErrors() : worksheet.addNewIgnoredErrors();
|
CTIgnoredErrors ctIgnoredErrors = worksheet.isSetIgnoredErrors() ? worksheet.getIgnoredErrors() : worksheet.addNewIgnoredErrors();
|
||||||
CTIgnoredError ctIgnoredError = ctIgnoredErrors.addNewIgnoredError();
|
CTIgnoredError ctIgnoredError = ctIgnoredErrors.addNewIgnoredError();
|
||||||
ctIgnoredError.setSqref(Arrays.asList(ref));
|
XSSFIgnoredErrorHelper.addIgnoredErrors(ctIgnoredError, ref, ignoredErrorTypes);
|
||||||
for (IgnoredErrorType errType : ignoredErrorTypes) {
|
|
||||||
XSSFIgnoredErrorHelper.set(errType, ctIgnoredError);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
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.apache.poi.ss.usermodel.IgnoredErrorType;
|
||||||
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTIgnoredError;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* XSSF-specific code for working with ignored errors
|
* XSSF-specific code for working with ignored errors
|
||||||
|
@ -82,4 +86,21 @@ public class XSSFIgnoredErrorHelper {
|
||||||
throw new IllegalStateException();
|
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.CellCopyPolicy;
|
||||||
import org.apache.poi.ss.usermodel.ClientAnchor;
|
import org.apache.poi.ss.usermodel.ClientAnchor;
|
||||||
import org.apache.poi.ss.usermodel.FormulaError;
|
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.Row;
|
||||||
import org.apache.poi.ss.usermodel.Sheet;
|
import org.apache.poi.ss.usermodel.Sheet;
|
||||||
import org.apache.poi.ss.usermodel.Workbook;
|
import org.apache.poi.ss.usermodel.Workbook;
|
||||||
|
|
Loading…
Reference in New Issue