]> source.dussan.org Git - poi.git/commitdiff
Fix implementation of XSSFWorkbook#cloneSheet and provide unit test.
authorUgo Cei <ugo@apache.org>
Wed, 23 Jan 2008 15:52:59 +0000 (15:52 +0000)
committerUgo Cei <ugo@apache.org>
Wed, 23 Jan 2008 15:52:59 +0000 (15:52 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@614571 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java

index 9ffa352ebb08857f24eac720f524bd58c12f9aa0..9c27621423b75d26bf5d2d55097c17f9b4af5df3 100644 (file)
@@ -86,6 +86,10 @@ public class XSSFSheet implements Sheet {
         hf.setOddFooter("&amp;C&amp;\"Arial\"&amp;10Page &amp;P");
     }
 
+    protected CTSheet getSheet() {
+        return this.sheet;
+    }
+    
     protected CTWorksheet getWorksheet() {
         return this.worksheet;
     }
@@ -601,4 +605,9 @@ public class XSSFSheet implements Sheet {
         }
         return views.getSheetViewArray(views.getSheetViewArray().length - 1);
     }
+    
+    protected XSSFSheet cloneSheet() {
+        return new XSSFSheet((CTSheet) sheet.copy());
+    }
+
 }
index 20f604be73af96798fc28c20598bee5840a7203a..a7af4ade3362cd9efb7727b5f23547596641504c 100644 (file)
@@ -79,7 +79,34 @@ public class XSSFWorkbook implements Workbook {
     }
 
     public Sheet cloneSheet(int sheetNum) {
-        // TODO Auto-generated method stub
+        XSSFSheet srcSheet = sheets.get(sheetNum);
+        String srcName = getSheetName(sheetNum);
+        if (srcSheet != null) {
+            XSSFSheet clonedSheet = srcSheet.cloneSheet();
+
+            sheets.add(clonedSheet);
+            CTSheet newcts = this.workbook.getSheets().addNewSheet();
+            newcts.set(clonedSheet.getSheet());
+            
+            int i = 1;
+            while (true) {
+                //Try and find the next sheet name that is unique
+                String name = srcName;
+                String index = Integer.toString(i++);
+                if (name.length() + index.length() + 2 < 31) {
+                    name = name + "("+index+")";
+                } else {
+                    name = name.substring(0, 31 - index.length() - 2) + "(" +index + ")";
+                }
+
+                //If the sheet name is unique, then set it otherwise move on to the next number.
+                if (getSheetIndex(name) == -1) {
+                    setSheetName(sheets.size() - 1, name);
+                    break;
+                }
+            }
+            return clonedSheet;
+        }
         return null;
     }
 
@@ -246,8 +273,7 @@ public class XSSFWorkbook implements Workbook {
     }
 
     public String getSheetName(int sheet) {
-        // TODO Auto-generated method stub
-        return null;
+        return this.workbook.getSheets().getSheetArray(sheet).getName();
     }
 
     public void insertChartRecord() {
@@ -311,13 +337,11 @@ public class XSSFWorkbook implements Workbook {
     }
 
     public void setSheetName(int sheet, String name) {
-        // TODO Auto-generated method stub
-
+        this.workbook.getSheets().getSheetArray(sheet).setName(name);
     }
 
     public void setSheetName(int sheet, String name, short encoding) {
-        // TODO Auto-generated method stub
-
+        this.workbook.getSheets().getSheetArray(sheet).setName(name);
     }
 
     public void setSheetOrder(String sheetname, int pos) {
index bf2c218cbcfa77f299a349d480dd60d2d4db5ea9..e739b544946f839af4ae849cffc4428575434f98 100644 (file)
@@ -70,4 +70,24 @@ public class TestXSSFWorkbook extends TestCase {
         workbook.setSelectedTab((short) 1);
         assertEquals(1, workbook.getSelectedTab());
     }
+    
+    public void testSetSheetName() throws Exception {
+        XSSFWorkbook workbook = new XSSFWorkbook();
+        Sheet sheet1 = workbook.createSheet("sheet1");
+        assertEquals("sheet1", workbook.getSheetName(0));
+        workbook.setSheetName(0, "sheet2");
+        assertEquals("sheet2", workbook.getSheetName(0));
+    }
+    
+    public void testCloneSheet() throws Exception {
+        XSSFWorkbook workbook = new XSSFWorkbook();
+        Sheet sheet1 = workbook.createSheet("sheet");
+        Sheet sheet2 = workbook.cloneSheet(0);
+        assertEquals(2, workbook.getNumberOfSheets());
+        assertEquals("sheet(1)", workbook.getSheetName(1));
+        workbook.setSheetName(1, "clonedsheet");
+        Sheet sheet3 = workbook.cloneSheet(1);
+        assertEquals(3, workbook.getNumberOfSheets());
+        assertEquals("clonedsheet(1)", workbook.getSheetName(2));
+    }
 }