]> source.dussan.org Git - poi.git/commitdiff
Have XSSF rich test strings report if they have formatting applied or not, and fix...
authorNick Burch <nick@apache.org>
Fri, 31 Jul 2015 17:22:05 +0000 (17:22 +0000)
committerNick Burch <nick@apache.org>
Fri, 31 Jul 2015 17:22:05 +0000 (17:22 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1693632 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFormulaEvaluator.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRichTextString.java

index 32eab8dc6bfd49198f2805d59b1e07dafac4e6c7..27317345cd1d0483153f0e2579164145d01336e8 100644 (file)
@@ -40,9 +40,6 @@ import org.apache.poi.ss.usermodel.FormulaEvaluator;
  * For performance reasons, this class keeps a cache of all previously calculated intermediate
  * cell values.  Be sure to call {@link #clearAllCachedResultValues()} if any workbook cells are changed between
  * calls to evaluate~ methods on this class.
- *
- * @author Amol S. Deshmukh &lt; amolweb at ya hoo dot com &gt;
- * @author Josh Micich
  */
 public class XSSFFormulaEvaluator implements FormulaEvaluator, WorkbookEvaluatorProvider {
 
index 13a1de914f8d121cf7af21156c3857ea7660d98a..a7f9b3a8e35a9da2884e3c98082d1bb4485d2026 100644 (file)
@@ -203,8 +203,11 @@ public class XSSFRichTextString implements RichTextString {
         CTRElt lt = st.addNewR();
         lt.setT(text);
         preserveSpaces(lt.xgetT());
-        CTRPrElt pr = lt.addNewRPr();
-        if(font != null) setRunAttributes(font.getCTFont(), pr);
+        
+        if (font != null) {
+            CTRPrElt pr = lt.addNewRPr();
+            setRunAttributes(font.getCTFont(), pr);
+        }
     }
 
     /**
@@ -244,6 +247,22 @@ public class XSSFRichTextString implements RichTextString {
         if(ctFont.sizeOfShadowArray() > 0) pr.addNewShadow().setVal(ctFont.getShadowArray(0).getVal());
         if(ctFont.sizeOfStrikeArray() > 0) pr.addNewStrike().setVal(ctFont.getStrikeArray(0).getVal());
     }
+    
+    /**
+     * Does this string have any explicit formatting applied, or is 
+     *  it just text in the default style?
+     */
+    public boolean hasFormatting() {
+        @SuppressWarnings("deprecation")
+        CTRElt[] rs = st.getRArray();
+        if (rs == null || rs.length == 0) {
+            return false;
+        }
+        for (CTRElt r : rs) {
+            if (r.isSetRPr()) return true;
+        }
+        return false;
+    }
 
     /**
      * Removes any formatting that may have been applied to the string.
index 0d62135d6e3f8023393fbe7ef1c01faa52caad18..153fc05d90c1da49028d788303f9e6ff31bf717d 100644 (file)
@@ -1629,7 +1629,8 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
      * </p>
      * @return true if the date systems used in the workbook starts in 1904
      */
-    protected boolean isDate1904(){
+    @Internal
+    public boolean isDate1904(){
         CTWorkbookPr workbookPr = workbook.getWorkbookPr();
         return workbookPr != null && workbookPr.getDate1904();
     }
index 8edf1930e0cff3b2d0f93ec9f4b1ae37b5b88d2e..b5f0a19b4e688976b60bc9bca58e1e6067649cd5 100644 (file)
@@ -41,16 +41,19 @@ public final class TestXSSFRichTextString extends TestCase {
     public void testCreate() {
         XSSFRichTextString rt = new XSSFRichTextString("Apache POI");
         assertEquals("Apache POI", rt.getString());
+        assertEquals(false, rt.hasFormatting());
 
         CTRst st = rt.getCTRst();
         assertTrue(st.isSetT());
         assertEquals("Apache POI", st.getT());
+        assertEquals(false, rt.hasFormatting());
 
         rt.append(" is cool stuff");
         assertEquals(2, st.sizeOfRArray());
         assertFalse(st.isSetT());
 
         assertEquals("Apache POI is cool stuff", rt.getString());
+        assertEquals(false, rt.hasFormatting());
     }
 
     public void testEmpty() {
@@ -67,11 +70,13 @@ public final class TestXSSFRichTextString extends TestCase {
         rt.append("89");
 
         assertEquals("123456789", rt.getString());
+        assertEquals(false, rt.hasFormatting());
 
         XSSFFont font1 = new XSSFFont();
         font1.setBold(true);
 
         rt.applyFont(2, 5, font1);
+        assertEquals(true, rt.hasFormatting());
 
         assertEquals(4, rt.numFormattingRuns());
         assertEquals(0, rt.getIndexOfFormattingRun(0));
@@ -152,6 +157,7 @@ public final class TestXSSFRichTextString extends TestCase {
 
         XSSFRichTextString rt = new XSSFRichTextString("Apache POI");
         assertEquals("Apache POI", rt.getString());
+        assertEquals(false, rt.hasFormatting());
 
         rt.clearFormatting();
 
@@ -159,15 +165,20 @@ public final class TestXSSFRichTextString extends TestCase {
         assertTrue(st.isSetT());
         assertEquals("Apache POI", rt.getString());
         assertEquals(0, rt.numFormattingRuns());
+        assertEquals(false, rt.hasFormatting());
 
         XSSFFont font = new XSSFFont();
         font.setBold(true);
 
         rt.applyFont(7, 10, font);
         assertEquals(2, rt.numFormattingRuns());
+        assertEquals(true, rt.hasFormatting());
+        
         rt.clearFormatting();
+        
         assertEquals("Apache POI", rt.getString());
         assertEquals(0, rt.numFormattingRuns());
+        assertEquals(false, rt.hasFormatting());
     }
 
     public void testGetFonts() {