]> source.dussan.org Git - poi.git/commitdiff
introduce CellReferenceType
authorPJ Fanning <fanningpj@apache.org>
Fri, 4 Feb 2022 20:16:44 +0000 (20:16 +0000)
committerPJ Fanning <fanningpj@apache.org>
Fri, 4 Feb 2022 20:16:44 +0000 (20:16 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1897779 13f79535-47bb-0310-9956-ffa450edef68

poi-ooxml/src/main/java/org/apache/poi/xssf/streaming/SXSSFWorkbook.java
poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java
poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
poi/src/main/java/org/apache/poi/ss/usermodel/CellReferenceType.java [new file with mode: 0644]
poi/src/main/java/org/apache/poi/ss/usermodel/Workbook.java
poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java

index 3c392cc63cdb84580aa5800f10327a2a958a7caf..50f945a44b5552d7bb9404efeb65e3071ec14b3d 100644 (file)
@@ -50,6 +50,7 @@ import org.apache.poi.openxml4j.util.ZipSecureFile;
 import org.apache.poi.ss.SpreadsheetVersion;
 import org.apache.poi.ss.formula.EvaluationWorkbook;
 import org.apache.poi.ss.formula.udf.UDFFinder;
+import org.apache.poi.ss.usermodel.CellReferenceType;
 import org.apache.poi.ss.usermodel.CellStyle;
 import org.apache.poi.ss.usermodel.CreationHelper;
 import org.apache.poi.ss.usermodel.DataFormat;
@@ -1356,8 +1357,8 @@ public class SXSSFWorkbook implements Workbook {
     }
 
     @Override
-    public Boolean usesR1C1CellReferences() {
-        return getXSSFWorkbook().usesR1C1CellReferences();
+    public CellReferenceType getCellReferenceType() {
+        return getXSSFWorkbook().getCellReferenceType();
     }
 
     @Override
index 0fd6eb56a957883ac250b80e5f3c73524f09c04a..dc4e8448e6c06b1c643b018f42f71e0353d5b4d2 100644 (file)
@@ -71,6 +71,7 @@ import org.apache.poi.ss.formula.SheetNameFormatter;
 import org.apache.poi.ss.formula.udf.AggregatingUDFFinder;
 import org.apache.poi.ss.formula.udf.IndexedUDFFinder;
 import org.apache.poi.ss.formula.udf.UDFFinder;
+import org.apache.poi.ss.usermodel.CellReferenceType;
 import org.apache.poi.ss.usermodel.DataFormat;
 import org.apache.poi.ss.usermodel.Date1904Support;
 import org.apache.poi.ss.usermodel.Name;
@@ -1551,16 +1552,16 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Date1904Su
     }
 
     @Override
-    public Boolean usesR1C1CellReferences() {
+    public CellReferenceType getCellReferenceType() {
         final CTCalcPr calcPr = getCTWorkbook().getCalcPr();
         if (calcPr == null) {
-            return null;
+            return CellReferenceType.UNKNOWN;
         } else if (calcPr.getRefMode() == R_1_C_1) {
-            return Boolean.TRUE;
+            return CellReferenceType.R1C1;
         } else if (calcPr.getRefMode() == A_1) {
-            return Boolean.FALSE;
+            return CellReferenceType.A1;
         }
-        return null;
+        return CellReferenceType.UNKNOWN;
     }
 
     @Override
index de1e1cc312d4f733f169e3cde7c526433b90f898..51a91fc920ac778ec2e0b019d54082e128bf037d 100644 (file)
 
 package org.apache.poi.xssf.usermodel;
 
-import static org.apache.commons.io.output.NullOutputStream.NULL_OUTPUT_STREAM;
-import static org.apache.poi.hssf.HSSFTestDataSamples.openSampleFileStream;
-import static org.apache.poi.xssf.XSSFTestDataSamples.*;
-import static org.junit.jupiter.api.Assertions.assertArrayEquals;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertSame;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import java.io.*;
-import java.nio.charset.StandardCharsets;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-import java.util.zip.CRC32;
-
 import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
 import org.apache.poi.POIDataSamples;
 import org.apache.poi.hssf.HSSFTestDataSamples;
 import org.apache.poi.ooxml.POIXMLProperties;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
-import org.apache.poi.openxml4j.opc.*;
+import org.apache.poi.openxml4j.opc.ContentTypes;
+import org.apache.poi.openxml4j.opc.OPCPackage;
+import org.apache.poi.openxml4j.opc.PackageAccess;
+import org.apache.poi.openxml4j.opc.PackagePart;
+import org.apache.poi.openxml4j.opc.PackagePartName;
+import org.apache.poi.openxml4j.opc.PackageRelationship;
+import org.apache.poi.openxml4j.opc.PackageRelationshipCollection;
+import org.apache.poi.openxml4j.opc.PackagingURIHelper;
+import org.apache.poi.openxml4j.opc.ZipPackage;
 import org.apache.poi.openxml4j.opc.internal.FileHelper;
 import org.apache.poi.openxml4j.opc.internal.MemoryPackagePart;
 import org.apache.poi.openxml4j.opc.internal.PackagePropertiesPart;
 import org.apache.poi.openxml4j.util.ZipInputStreamZipEntrySource;
 import org.apache.poi.ss.tests.usermodel.BaseTestXWorkbook;
-import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellReferenceType;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.Comment;
+import org.apache.poi.ss.usermodel.DataFormatter;
+import org.apache.poi.ss.usermodel.Font;
+import org.apache.poi.ss.usermodel.FormulaError;
+import org.apache.poi.ss.usermodel.RichTextString;
+import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Row.MissingCellPolicy;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.usermodel.WorkbookFactory;
 import org.apache.poi.ss.util.AreaReference;
 import org.apache.poi.ss.util.CellAddress;
 import org.apache.poi.ss.util.CellReference;
@@ -68,6 +68,31 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbookPr;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.STCalcMode;
 
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.zip.CRC32;
+
+import static org.apache.commons.io.output.NullOutputStream.NULL_OUTPUT_STREAM;
+import static org.apache.poi.hssf.HSSFTestDataSamples.openSampleFileStream;
+import static org.apache.poi.xssf.XSSFTestDataSamples.openSampleWorkbook;
+import static org.apache.poi.xssf.XSSFTestDataSamples.writeOut;
+import static org.apache.poi.xssf.XSSFTestDataSamples.writeOutAndReadBack;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
 public final class TestXSSFWorkbook extends BaseTestXWorkbook {
 
     public TestXSSFWorkbook() {
@@ -1347,12 +1372,12 @@ public final class TestXSSFWorkbook extends BaseTestXWorkbook {
                 UnsynchronizedByteArrayOutputStream bos = new UnsynchronizedByteArrayOutputStream();
                 XSSFWorkbook wb = openSampleWorkbook("WithTable.xlsx")
         ) {
-            assertFalse(wb.usesR1C1CellReferences());
+            assertEquals(CellReferenceType.A1, wb.getCellReferenceType());
             wb.setUseR1C1CellReferences(true);
-            assertTrue(wb.usesR1C1CellReferences());
+            assertEquals(CellReferenceType.R1C1, wb.getCellReferenceType());
             wb.write(bos);
             try (XSSFWorkbook wb2 = new XSSFWorkbook(bos.toInputStream())) {
-                assertTrue(wb2.usesR1C1CellReferences());
+                assertEquals(CellReferenceType.R1C1, wb2.getCellReferenceType());
             }
         }
     }
@@ -1363,12 +1388,12 @@ public final class TestXSSFWorkbook extends BaseTestXWorkbook {
                 UnsynchronizedByteArrayOutputStream bos = new UnsynchronizedByteArrayOutputStream();
                 XSSFWorkbook wb = new XSSFWorkbook()
         ) {
-            assertNull(wb.usesR1C1CellReferences());
+            assertEquals(CellReferenceType.UNKNOWN, wb.getCellReferenceType());
             wb.setUseR1C1CellReferences(true);
-            assertTrue(wb.usesR1C1CellReferences());
+            assertEquals(CellReferenceType.R1C1, wb.getCellReferenceType());
             wb.write(bos);
             try (XSSFWorkbook wb2 = new XSSFWorkbook(bos.toInputStream())) {
-                assertTrue(wb2.usesR1C1CellReferences());
+                assertEquals(CellReferenceType.R1C1, wb2.getCellReferenceType());
             }
         }
     }
index cc457daa1217e1395928256e955f733dbc5ce316..82473b60ffe5b24e16aa163b5b4d0116cc1567c8 100644 (file)
@@ -96,6 +96,7 @@ import org.apache.poi.ss.formula.SheetNameFormatter;
 import org.apache.poi.ss.formula.udf.AggregatingUDFFinder;
 import org.apache.poi.ss.formula.udf.IndexedUDFFinder;
 import org.apache.poi.ss.formula.udf.UDFFinder;
+import org.apache.poi.ss.usermodel.CellReferenceType;
 import org.apache.poi.ss.usermodel.Name;
 import org.apache.poi.ss.usermodel.Row.MissingCellPolicy;
 import org.apache.poi.ss.usermodel.Sheet;
@@ -1748,7 +1749,7 @@ public final class HSSFWorkbook extends POIDocument implements Workbook {
     }
 
     @Override
-    public Boolean usesR1C1CellReferences() {
+    public CellReferenceType getCellReferenceType() {
         for (HSSFSheet hssfSheet : _sheets) {
             InternalSheet internalSheet = hssfSheet.getSheet();
 
@@ -1759,14 +1760,14 @@ public final class HSSFWorkbook extends POIDocument implements Workbook {
                 if (record instanceof RefModeRecord) refModeRecord = (RefModeRecord)record;
             }
             if (refModeRecord == null) {
-                return null;
+                continue;
             } else if (refModeRecord.getMode() == RefModeRecord.USE_R1C1_MODE) {
-                return Boolean.TRUE;
+                return CellReferenceType.R1C1;
             } else if (refModeRecord.getMode() == RefModeRecord.USE_A1_MODE) {
-                return Boolean.FALSE;
+                return CellReferenceType.A1;
             }
         }
-        return null;
+        return CellReferenceType.UNKNOWN;
     }
 
     /**
diff --git a/poi/src/main/java/org/apache/poi/ss/usermodel/CellReferenceType.java b/poi/src/main/java/org/apache/poi/ss/usermodel/CellReferenceType.java
new file mode 100644 (file)
index 0000000..c4f9bc0
--- /dev/null
@@ -0,0 +1,40 @@
+/* ====================================================================
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+
+package org.apache.poi.ss.usermodel;
+
+/**
+ * Types of cell references.
+ * @since POI 5.2.1
+ */
+public enum CellReferenceType {
+
+    /**
+     * Cells are referenced in the form A1, B4, etc.
+     */
+    A1,
+    
+    /**
+     * Cells are referenced in the form R1C1, R4C2, etc.
+     */
+    R1C1,
+    
+    /**
+     * The cell reference type is not defined explicitly by <code>A1</code> is the default in this case.
+     */
+    UNKNOWN
+}
index 3851ed581e20418d38e23d3cc1cae7b03bc79bcf..7f59ab17b56ee9bff644cfe425948e0d69d73a05 100644 (file)
@@ -633,11 +633,10 @@ public interface Workbook extends Closeable, Iterable<Sheet> {
     EvaluationWorkbook createEvaluationWorkbook();
 
     /**
-     * @return true if workbook is configured to use R1C1 cell references (as opposed to A1 cell references).
-     * Returns null if the configuration is not explicitly set on the workbook.
+     * @return the type of cell references used
      * @since POI 5.2.1
      */
-    Boolean usesR1C1CellReferences();
+    CellReferenceType getCellReferenceType();
 
     /**
      * @param useR1C1CellReferences set to true if you want to configure workbook to use R1C1 cell references (as opposed to A1 cell references).
index 35caef0690e5511ff9497a7cd9151e4d71bf3a8f..3851c44a7e20fd74e741a1112f5bd1b88f0425ee 100644 (file)
@@ -61,6 +61,7 @@ import org.apache.poi.poifs.filesystem.POIFSFileSystem;
 import org.apache.poi.ss.formula.ptg.Area3DPtg;
 import org.apache.poi.ss.usermodel.BaseTestWorkbook;
 import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellReferenceType;
 import org.apache.poi.ss.usermodel.ConditionalFormatting;
 import org.apache.poi.ss.usermodel.ConditionalFormattingRule;
 import org.apache.poi.ss.usermodel.Name;
@@ -1184,12 +1185,12 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook {
                 UnsynchronizedByteArrayOutputStream bos = new UnsynchronizedByteArrayOutputStream();
                 HSSFWorkbook wb = openSampleWorkbook("49423.xls")
         ) {
-            assertFalse(wb.usesR1C1CellReferences());
+            assertEquals(CellReferenceType.A1, wb.getCellReferenceType());
             wb.setUseR1C1CellReferences(true);
-            assertTrue(wb.usesR1C1CellReferences());
+            assertEquals(CellReferenceType.R1C1, wb.getCellReferenceType());
             wb.write(bos);
             try (HSSFWorkbook wb2 = new HSSFWorkbook(bos.toInputStream())) {
-                assertTrue(wb2.usesR1C1CellReferences());
+                assertEquals(CellReferenceType.R1C1, wb2.getCellReferenceType());
             }
         }
     }
@@ -1200,14 +1201,14 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook {
                 UnsynchronizedByteArrayOutputStream bos = new UnsynchronizedByteArrayOutputStream();
                 HSSFWorkbook wb = new HSSFWorkbook()
         ) {
-            assertNull(wb.usesR1C1CellReferences());
+            assertEquals(CellReferenceType.UNKNOWN, wb.getCellReferenceType());
             HSSFSheet sheet = wb.createSheet();
-            assertFalse(wb.usesR1C1CellReferences());
+            assertEquals(CellReferenceType.A1, wb.getCellReferenceType());
             wb.setUseR1C1CellReferences(true);
-            assertTrue(wb.usesR1C1CellReferences());
+            assertEquals(CellReferenceType.R1C1, wb.getCellReferenceType());
             wb.write(bos);
             try (HSSFWorkbook wb2 = new HSSFWorkbook(bos.toInputStream())) {
-                assertTrue(wb2.usesR1C1CellReferences());
+                assertEquals(CellReferenceType.R1C1, wb2.getCellReferenceType());
             }
         }
     }