]> source.dussan.org Git - poi.git/commitdiff
preserve rich text in cell copy
authorPJ Fanning <fanningpj@apache.org>
Fri, 24 Dec 2021 11:11:44 +0000 (11:11 +0000)
committerPJ Fanning <fanningpj@apache.org>
Fri, 24 Dec 2021 11:11:44 +0000 (11:11 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1896348 13f79535-47bb-0310-9956-ffa450edef68

poi-ooxml/src/test/java/org/apache/poi/ss/tests/util/TestXSSFCellUtilCopy.java
poi/src/test/java/org/apache/poi/ss/util/BaseTestCellUtilCopy.java

index 24e53c68f92c6d578055b69037a4470dbfbf2723..720218ace66560ee675fbd3d22cbe30a3e533050 100644 (file)
 
 package org.apache.poi.ss.tests.util;
 
+import org.apache.poi.ss.usermodel.RichTextString;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.ss.util.BaseTestCellUtilCopy;
+import org.apache.poi.xssf.usermodel.XSSFRichTextString;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
 public class TestXSSFCellUtilCopy extends BaseTestCellUtilCopy {
@@ -27,4 +29,15 @@ public class TestXSSFCellUtilCopy extends BaseTestCellUtilCopy {
     protected Workbook createNewWorkbook() {
         return new XSSFWorkbook();
     }
+
+    @Override
+    protected boolean compareRichText(RichTextString rts1, RichTextString rts2) {
+        if (rts1 instanceof XSSFRichTextString && rts2 instanceof XSSFRichTextString) {
+            XSSFRichTextString xrts1 = (XSSFRichTextString)rts1;
+            XSSFRichTextString xrts2 = (XSSFRichTextString)rts2;
+            return xrts1.getCTRst().xmlText().equals(xrts2.getCTRst().xmlText());
+        } else {
+            return super.compareRichText(rts1, rts2);
+        }
+    }
 }
index 1396448a4cebfd1ac2ed7b102aa96fce60deb043..ea214e815dc2aeddf54f01b5936dd0ffe0fe8824 100644 (file)
@@ -64,6 +64,26 @@ public abstract class BaseTestCellUtilCopy {
         assertEquals(CellType.NUMERIC, destCell.getCellType());
     }
 
+    @Test
+    public final void testCopyCellFrom_CellCopyPolicy_richTextValue() {
+        setUp_testCopyCellFrom_CellCopyPolicy();
+        Workbook wb = srcCell.getSheet().getWorkbook();
+        CreationHelper creationHelper = wb.getCreationHelper();
+        RichTextString rts = creationHelper.createRichTextString("text 123");
+        Font font = wb.createFont();
+        font.setFontHeight((short) 999);
+        font.setFontName("Muriel");
+        rts.applyFont(0, 3, font);
+        srcCell.setCellFormula(null);
+        srcCell.setCellValue(rts);
+
+        // Paste values only
+        final CellCopyPolicy policy = new CellCopyPolicy.Builder().cellFormula(false).build();
+        CellUtil.copyCell(srcCell, destCell, policy, new CellCopyContext());
+        assertEquals(CellType.STRING, destCell.getCellType());
+        assertTrue(compareRichText(rts, destCell.getRichStringCellValue()));
+    }
+
     @Test
     public final void testCopyCellFrom_CellCopyPolicy_formulaWithUnregisteredUDF() {
         setUp_testCopyCellFrom_CellCopyPolicy();
@@ -165,4 +185,7 @@ public abstract class BaseTestCellUtilCopy {
 
     protected abstract Workbook createNewWorkbook();
 
+    protected boolean compareRichText(RichTextString rts1, RichTextString rts2) {
+        return rts1.getString().equals(rts2.getString());
+    }
 }