Index: src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java =================================================================== --- src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java (revisione 7519) +++ src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java (revisione 7589) @@ -344,7 +344,7 @@ } public void removeSheetAt(int index) { - XSSFSheet sheet = this.sheets.remove(index); + this.sheets.remove(index); this.workbook.getSheets().removeSheet(index); } Index: src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/CellReferenceHelper.java =================================================================== --- src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/CellReferenceHelper.java (revisione 7519) +++ src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/CellReferenceHelper.java (revisione 7589) @@ -1,42 +0,0 @@ -/* ==================================================================== - 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.xssf.usermodel.helpers; - -public class CellReferenceHelper { - - public short getColumnIndexFromReference(String reference) { - StringBuffer sb = new StringBuffer(""); - for (int i = 0 ; i < reference.length() ; i++) { - char item = reference.charAt(i); - if ((int)item >= 65 && (int)item <= 90) { - sb.append(item); - } - else continue; - } - return getColumnIndex(sb.toString()); - } - - public short getColumnIndex(String reference) { - double columnIndex = -1; - for (int i = (reference.length() - 1) ; i >= 0 ; i--) { - columnIndex = columnIndex + ((reference.charAt(reference.length() - (i + 1)) - 64) * Math.pow(26, i)); - } - return (short)columnIndex; - } - -} Index: src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/ColumnHelper.java =================================================================== --- src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/ColumnHelper.java (revisione 7519) +++ src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/ColumnHelper.java (revisione 7589) @@ -26,7 +26,7 @@ public class ColumnHelper { private CTWorksheet worksheet; - + private CTCols newCols; public ColumnHelper(CTWorksheet worksheet) { super(); @@ -35,7 +35,7 @@ } public void cleanColumns() { - CTCols newCols = CTCols.Factory.newInstance(); + this.newCols = CTCols.Factory.newInstance(); CTCols[] colsArray = worksheet.getColsArray(); int i = 0; for (i = 0 ; i < colsArray.length ; i++) { @@ -85,6 +85,34 @@ if (col.getHidden()) { newCol.setHidden(true); } + if (col.getBestFit()) { + newCol.setBestFit(true); + } } + public void setColBestFit(long index, boolean bestFit) { + CTCol col = getOrCreateColumn(index); + col.setBestFit(bestFit); + } + + public void setColWidth(long index, double width) { + CTCol col = getOrCreateColumn(index); + col.setWidth(width); + } + + public void setColHidden(long index, boolean hidden) { + CTCol col = getOrCreateColumn(index); + col.setHidden(hidden); + } + + protected CTCol getOrCreateColumn(long index) { + CTCol col = getColumn(index); + if (col == null) { + col = worksheet.getColsArray(0).addNewCol(); + col.setMin(index); + col.setMax(index); + } + return col; + } + } Index: src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java =================================================================== --- src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java (revisione 7519) +++ src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java (revisione 7589) @@ -31,15 +31,14 @@ import org.apache.poi.ss.usermodel.PrintSetup; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.xssf.usermodel.helpers.CellReferenceHelper; import org.apache.poi.xssf.usermodel.helpers.ColumnHelper; +import org.apache.poi.xssf.util.CellReference; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBreak; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCol; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCols; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTHeaderFooter; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPageBreak; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPageMargins; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPageSetUpPr; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRow; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSelection; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetFormatPr; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetPr; @@ -51,7 +50,7 @@ public class XSSFSheet implements Sheet { private CTSheet sheet; - private CTWorksheet worksheet; + private CTWorksheet typesheet; private List rows; private ColumnHelper columnHelper; private XSSFWorkbook workbook; @@ -64,50 +63,17 @@ public static final short FooterMargin = 5; public XSSFSheet(CTSheet sheet, XSSFWorkbook workbook) { + this.workbook = workbook; this.sheet = sheet; - this.worksheet = CTWorksheet.Factory.newInstance(); - this.workbook = workbook; - this.worksheet.addNewSheetData(); - initRows(worksheet); - - this.worksheet.addNewHeaderFooter(); - worksheet.addNewRowBreaks(); - worksheet.addNewColBreaks(); - CTSheetPr sheetPr = worksheet.addNewSheetPr(); - sheetPr.addNewPageSetUpPr(); - worksheet.addNewPageMargins(); - - // XXX Initial default data, probably useful only for testing. Review and eliminate if necessary. - CTSheetViews views = this.worksheet.addNewSheetViews(); - CTSheetView view = views.addNewSheetView(); - view.setWorkbookViewId(0); - view.setZoomScale(100); - CTSelection selection = view.addNewSelection(); - selection.setActiveCell("A1"); - CTSheetFormatPr format = this.worksheet.addNewSheetFormatPr(); - format.setDefaultColWidth(13); - format.setDefaultRowHeight(15); - format.setCustomHeight(true); - CTCols cols = this.worksheet.addNewCols(); - CTCol col = cols.addNewCol(); - col.setMin(1); - col.setMax(2); - col.setWidth(13); - col.setCustomWidth(true); - for (int i = 3 ; i < 5 ; ++i) { - col = cols.addNewCol(); - col.setMin(i); - col.setMax(i); - col.setWidth(13); - col.setCustomWidth(true); - } - - initColumns(worksheet); + this.typesheet = CTWorksheet.Factory.newInstance(); + this.typesheet.addNewSheetData(); + initRows(typesheet); + initColumns(typesheet); } public XSSFSheet(CTSheet sheet, CTWorksheet worksheet, XSSFWorkbook workbook) { this.sheet = sheet; - this.worksheet = worksheet; + this.typesheet = worksheet; this.workbook = workbook; initRows(worksheet); initColumns(worksheet); @@ -120,6 +86,10 @@ public XSSFWorkbook getWorkbook() { return this.workbook; } + + public ColumnHelper getColumnHelper() { + return columnHelper; + } private void initRows(CTWorksheet worksheet) { this.rows = new LinkedList(); @@ -137,7 +107,7 @@ } protected CTWorksheet getWorksheet() { - return this.worksheet; + return this.typesheet; } public int addMergedRegion(Region region) { @@ -146,8 +116,7 @@ } public void autoSizeColumn(short column) { - // TODO Auto-generated method stub - + columnHelper.setColBestFit(column, true); } public Patriarch createDrawingPatriarch() { @@ -166,7 +135,7 @@ } protected XSSFRow addRow(int index, int rownum) { - CTRow row = this.worksheet.getSheetData().insertNewRow(index); + CTRow row = this.typesheet.getSheetData().insertNewRow(index); XSSFRow xrow = new XSSFRow(row, this); xrow.setRowNum(rownum); return xrow; @@ -214,16 +183,30 @@ } public boolean getAutobreaks() { - return worksheet.getSheetPr().getPageSetUpPr().getAutoPageBreaks(); + return getTypesheetPageSetUpPr().getAutoPageBreaks(); } + private CTPageSetUpPr getTypesheetPageSetUpPr() { + if (getTypesheetSheetPr().getPageSetUpPr() == null) { + getTypesheetSheetPr().setPageSetUpPr(CTPageSetUpPr.Factory.newInstance()); + } + return getTypesheetSheetPr().getPageSetUpPr(); + } + + protected CTSheetPr getTypesheetSheetPr() { + if (typesheet.getSheetPr() == null) { + typesheet.setSheetPr(CTSheetPr.Factory.newInstance()); + } + return typesheet.getSheetPr(); + } + public Comment getCellComment(int row, int column) { // TODO Auto-generated method stub return null; } public short[] getColumnBreaks() { - CTBreak[] brkArray = worksheet.getColBreaks().getBrkArray(); + CTBreak[] brkArray = getTypesheetColumnBreaks().getBrkArray(); if (brkArray.length == 0) { return null; } @@ -235,20 +218,34 @@ return breaks; } + protected CTPageBreak getTypesheetColumnBreaks() { + if (typesheet.getColBreaks() == null) { + typesheet.setColBreaks(CTPageBreak.Factory.newInstance()); + } + return typesheet.getColBreaks(); + } + public short getColumnWidth(short column) { return (short) columnHelper.getColumn(column).getWidth(); } public short getDefaultColumnWidth() { - return (short) this.worksheet.getSheetFormatPr().getDefaultColWidth(); + return (short) getTypesheetSheetFormatPr().getDefaultColWidth(); } public short getDefaultRowHeight() { - return (short) (this.worksheet.getSheetFormatPr().getDefaultRowHeight() * 20); + return (short) (getTypesheetSheetFormatPr().getDefaultRowHeight() * 20); } + protected CTSheetFormatPr getTypesheetSheetFormatPr() { + if (typesheet.getSheetFormatPr() == null) { + typesheet.setSheetFormatPr(CTSheetFormatPr.Factory.newInstance()); + } + return typesheet.getSheetFormatPr(); + } + public float getDefaultRowHeightInPoints() { - return (short) this.worksheet.getSheetFormatPr().getDefaultRowHeight(); + return (short) getTypesheetSheetFormatPr().getDefaultRowHeight(); } public boolean getDialog() { @@ -272,7 +269,7 @@ } public boolean getFitToPage() { - return worksheet.getSheetPr().getPageSetUpPr().getFitToPage(); + return getTypesheetPageSetUpPr().getFitToPage(); } public Footer getFooter() { @@ -280,15 +277,22 @@ } public Footer getOddFooter() { - return new XSSFOddFooter(worksheet.getHeaderFooter()); + return new XSSFOddFooter(getTypesheetHeaderFooter()); } + + protected CTHeaderFooter getTypesheetHeaderFooter() { + if (typesheet.getHeaderFooter() == null) { + typesheet.setHeaderFooter(CTHeaderFooter.Factory.newInstance()); + } + return typesheet.getHeaderFooter(); + } public Footer getEvenFooter() { - return new XSSFEvenFooter(worksheet.getHeaderFooter()); + return new XSSFEvenFooter(getTypesheetHeaderFooter()); } public Footer getFirstFooter() { - return new XSSFFirstFooter(worksheet.getHeaderFooter()); + return new XSSFFirstFooter(getTypesheetHeaderFooter()); } public Header getHeader() { @@ -296,16 +300,16 @@ } public Header getOddHeader() { - return new XSSFOddHeader(worksheet.getHeaderFooter()); + return new XSSFOddHeader(getTypesheetHeaderFooter()); } public Header getEvenHeader() { - return new XSSFEvenHeader(worksheet.getHeaderFooter() + return new XSSFEvenHeader(getTypesheetHeaderFooter() ); } public Header getFirstHeader() { - return new XSSFFirstHeader(worksheet.getHeaderFooter()); + return new XSSFFirstHeader(getTypesheetHeaderFooter()); } public boolean getHorizontallyCenter() { @@ -325,14 +329,14 @@ } public short getLeftCol() { - // TODO no way to test this high level method at the moment. - CellReferenceHelper cellReferenceHelper = new CellReferenceHelper(); - String cellRef = worksheet.getSheetViews().getSheetViewArray(0).getTopLeftCell(); - return cellReferenceHelper.getColumnIndexFromReference(cellRef); + // TODO no test for this method at the moment. + String cellRef = typesheet.getSheetViews().getSheetViewArray(0).getTopLeftCell(); + CellReference cellReference = new CellReference(cellRef); + return cellReference.getCol(); } public double getMargin(short margin) { - CTPageMargins pageMargins = worksheet.getPageMargins(); + CTPageMargins pageMargins = getTypesheetPageMargins(); switch (margin) { case LeftMargin: return pageMargins.getLeft(); @@ -351,6 +355,13 @@ } } + protected CTPageMargins getTypesheetPageMargins() { + if (typesheet.getPageMargins() == null) { + typesheet.setPageMargins(CTPageMargins.Factory.newInstance()); + } + return typesheet.getPageMargins(); + } + public Region getMergedRegionAt(int index) { // TODO Auto-generated method stub return null; @@ -407,7 +418,7 @@ } public int[] getRowBreaks() { - CTPageBreak rowBreaks = worksheet.getRowBreaks(); + CTPageBreak rowBreaks = getTypesheetRowBreaks(); int breaksCount = rowBreaks.getBrkArray().length; if (breaksCount == 0) { return null; @@ -420,6 +431,13 @@ return breaks; } + protected CTPageBreak getTypesheetRowBreaks() { + if (typesheet.getRowBreaks() == null) { + typesheet.setRowBreaks(CTPageBreak.Factory.newInstance()); + } + return typesheet.getRowBreaks(); + } + public boolean getRowSumsBelow() { // TODO Auto-generated method stub return false; @@ -436,8 +454,10 @@ } public short getTopRow() { - // TODO Auto-generated method stub - return 0; + // TODO no test for this method at the moment. + String cellRef = typesheet.getSheetViews().getSheetViewArray(0).getTopLeftCell(); + CellReference cellReference = new CellReference(cellRef); + return (short) cellReference.getRow(); } public boolean getVerticallyCenter(boolean value) { @@ -456,7 +476,7 @@ } public boolean isColumnBroken(short column) { - CTBreak[] brkArray = worksheet.getColBreaks().getBrkArray(); + CTBreak[] brkArray = getTypesheetColumnBreaks().getBrkArray(); for (int i = 0 ; i < brkArray.length ; i++) { if (brkArray[i].getId() == column) { return true; @@ -513,10 +533,10 @@ } public void removeColumnBreak(short column) { - CTBreak[] brkArray = worksheet.getColBreaks().getBrkArray(); + CTBreak[] brkArray = getTypesheetColumnBreaks().getBrkArray(); for (int i = 0 ; i < brkArray.length ; i++) { if (brkArray[i].getId() == column) { - worksheet.getColBreaks().removeBrk(i); + getTypesheetColumnBreaks().removeBrk(i); continue; } } @@ -533,17 +553,17 @@ Row r = it.next(); if (r.getRowNum() == row.getRowNum()) { it.remove(); - worksheet.getSheetData().removeRow(counter); + typesheet.getSheetData().removeRow(counter); } counter++; } } public void removeRowBreak(int row) { - CTBreak[] brkArray = worksheet.getRowBreaks().getBrkArray(); + CTBreak[] brkArray = getTypesheetRowBreaks().getBrkArray(); for (int i = 0 ; i < brkArray.length ; i++) { if (brkArray[i].getId() == row) { - worksheet.getRowBreaks().removeBrk(i); + getTypesheetRowBreaks().removeBrk(i); continue; } } @@ -571,12 +591,12 @@ } public void setAutobreaks(boolean b) { - worksheet.getSheetPr().getPageSetUpPr().setAutoPageBreaks(b); + getTypesheetPageSetUpPr().setAutoPageBreaks(b); } public void setColumnBreak(short column) { if (! isColumnBroken(column)) { - CTBreak brk = worksheet.getColBreaks().addNewBrk(); + CTBreak brk = getTypesheetColumnBreaks().addNewBrk(); brk.setId(column); } } @@ -587,11 +607,11 @@ } public void setColumnHidden(short column, boolean hidden) { - columnHelper.getColumn(column).setHidden(hidden); + columnHelper.setColHidden(column, hidden); } public void setColumnWidth(short column, short width) { - columnHelper.getColumn(column).setWidth(width); + columnHelper.setColWidth(column, width); } public void setDefaultColumnStyle(short column, CellStyle style) { @@ -600,16 +620,16 @@ } public void setDefaultColumnWidth(short width) { - this.worksheet.getSheetFormatPr().setDefaultColWidth((double) width); + getTypesheetSheetFormatPr().setDefaultColWidth((double) width); } public void setDefaultRowHeight(short height) { - this.worksheet.getSheetFormatPr().setDefaultRowHeight(height / 20); + getTypesheetSheetFormatPr().setDefaultRowHeight(height / 20); } public void setDefaultRowHeightInPoints(float height) { - this.worksheet.getSheetFormatPr().setDefaultRowHeight(height); + getTypesheetSheetFormatPr().setDefaultRowHeight(height); } @@ -639,7 +659,7 @@ } public void setFitToPage(boolean b) { - worksheet.getSheetPr().getPageSetUpPr().setFitToPage(b); + getTypesheetPageSetUpPr().setFitToPage(b); } public void setGridsPrinted(boolean value) { @@ -653,7 +673,7 @@ } public void setMargin(short margin, double size) { - CTPageMargins pageMargins = worksheet.getPageMargins(); + CTPageMargins pageMargins = getTypesheetPageMargins(); switch (margin) { case LeftMargin: pageMargins.setLeft(size); @@ -681,7 +701,7 @@ } public void setRowBreak(int row) { - CTPageBreak pageBreak = worksheet.getRowBreaks(); + CTPageBreak pageBreak = getTypesheetRowBreaks(); if (! isRowBroken(row)) { CTBreak brk = pageBreak.addNewBrk(); brk.setId(row); @@ -744,11 +764,19 @@ } public void setTabSelected(boolean flag) { - CTSheetViews views = this.worksheet.getSheetViews(); + CTSheetViews views = getTypesheetSheetViews(); for (CTSheetView view : views.getSheetViewArray()) { view.setTabSelected(flag); } } + + protected CTSheetViews getTypesheetSheetViews() { + if (typesheet.getSheetViews() == null) { + typesheet.setSheetViews(CTSheetViews.Factory.newInstance()); + typesheet.getSheetViews().addNewSheetView(); + } + return typesheet.getSheetViews(); + } public boolean isTabSelected() { CTSheetView view = getDefaultSheetView(); @@ -765,7 +793,7 @@ * workbookView entries) are saved." */ private CTSheetView getDefaultSheetView() { - CTSheetViews views = this.worksheet.getSheetViews(); + CTSheetViews views = getTypesheetSheetViews(); if (views == null || views.getSheetViewArray() == null || views.getSheetViewArray().length <= 0) { return null; } Index: src/ooxml/java/org/apache/poi/xssf/util/CellReference.java =================================================================== --- src/ooxml/java/org/apache/poi/xssf/util/CellReference.java (revisione 0) +++ src/ooxml/java/org/apache/poi/xssf/util/CellReference.java (revisione 7589) @@ -0,0 +1,102 @@ +/* ==================================================================== + 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.xssf.util; + +public class CellReference { + + private int row; + private short col; + + public CellReference() { + } + + public CellReference(String cellRef) { + if (cellRef == null || "".equals(cellRef)) { + throw new IllegalArgumentException("Invalid Formula cell reference: '"+cellRef+"'"); + } + String[] parts = getCellRefParts(cellRef); + col = getColNumFromRef(parts[0]); + row = getRowNumFromRef(parts[1]); + } + + public CellReference(short col, int row) { + this.col = col; + this.row = row; + } + + public int getRow() { + return this.row; + } + + public short getCol() { + return this.col; + } + + public String[] getCellRefParts(String cellRef) { + StringBuffer sb0 = new StringBuffer(""); + StringBuffer sb1 = new StringBuffer(""); + String[] parts = new String[2]; + for (int i = 0 ; i < cellRef.length() ; i++) { + char item = cellRef.charAt(i); + if ((int)item >= 65 && (int)item <= 90) { + sb0.append(item); + } + else { + sb1.append(item); + } + } + parts[0] = sb0.toString(); + parts[1] = sb1.toString(); + return parts; + } + + public int getRowNumFromRef(String rowRef) { + return (new Integer(rowRef).intValue()) - 1; + } + + public short getColNumFromRef(String colRef) { + double columnIndex = -1; + for (int i = (colRef.length() - 1) ; i >= 0 ; i--) { + char numericCharValue = colRef.charAt(colRef.length() - (i + 1)); + int convertedNumericCharValue = (numericCharValue - 64); + double indexIncrement = (convertedNumericCharValue * Math.pow(26, i)); + columnIndex = columnIndex + indexIncrement; + } + return (short)columnIndex; + } + + public String convertNumToColString(short col) { + String colRef = ""; + double div = 1; + double mod = 0; + for (int i = 0 ; div >= 1 ; i ++) { + System.err.println("col: " + col); + mod = col % 26; + div = col / 26; + int AsciiIncrement = (i != 0 ? 64 : 65); + char modToChar = (char)(mod + AsciiIncrement); + System.err.println("mod: " + mod); + System.err.println("div: " + div); + System.err.println("modToChar: " + modToChar); + colRef = modToChar + colRef; + col = (short) ((col - mod) / 26); + } + return colRef; + } + +} Index: src/ooxml/testcases/org/apache/poi/xssf/usermodel/helpers/TestCellReferenceHelper.java =================================================================== --- src/ooxml/testcases/org/apache/poi/xssf/usermodel/helpers/TestCellReferenceHelper.java (revisione 7519) +++ src/ooxml/testcases/org/apache/poi/xssf/usermodel/helpers/TestCellReferenceHelper.java (revisione 7589) @@ -1,57 +0,0 @@ -/* ==================================================================== - 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.xssf.usermodel.helpers; - -import junit.framework.TestCase; - - -public class TestCellReferenceHelper extends TestCase { - - public void testGetColumnIndex() { - CellReferenceHelper helper = new CellReferenceHelper(); - String reference = "A"; - assertEquals((short) 0, helper.getColumnIndex(reference)); - reference = "B"; - assertEquals((short) 1, helper.getColumnIndex(reference)); - reference = "AA"; - assertEquals((short) 26, helper.getColumnIndex(reference)); - reference = "AB"; - assertEquals((short) 27, helper.getColumnIndex(reference)); - reference = "BA"; - assertEquals((short) 52, helper.getColumnIndex(reference)); - reference = "AAA"; - assertEquals((short) 702, helper.getColumnIndex(reference)); - reference = "AAG"; - assertEquals((short) 708, helper.getColumnIndex(reference)); - } - - public void testGetColumnIndexFromReference() { - CellReferenceHelper helper = new CellReferenceHelper(); - String reference = "A1"; - assertEquals((short) 0, helper.getColumnIndexFromReference(reference)); - reference = "B8"; - assertEquals((short) 1, helper.getColumnIndexFromReference(reference)); - reference = "BA8"; - assertEquals((short) 52, helper.getColumnIndexFromReference(reference)); - reference = "BA123456"; - assertEquals((short) 52, helper.getColumnIndexFromReference(reference)); - reference = "AAG88"; - assertEquals((short) 708, helper.getColumnIndexFromReference(reference)); - } - -} Index: src/ooxml/testcases/org/apache/poi/xssf/usermodel/helpers/TestColumnHelper.java =================================================================== --- src/ooxml/testcases/org/apache/poi/xssf/usermodel/helpers/TestColumnHelper.java (revisione 7519) +++ src/ooxml/testcases/org/apache/poi/xssf/usermodel/helpers/TestColumnHelper.java (revisione 7589) @@ -19,6 +19,8 @@ import junit.framework.TestCase; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCol; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCols; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet; @@ -94,7 +96,20 @@ assertEquals((double) 12, newCol.getWidth()); assertTrue(newCol.getHidden()); } + + public void testGetOrCreateColumn() { + XSSFWorkbook workbook = new XSSFWorkbook(); + XSSFSheet sheet = (XSSFSheet) workbook.createSheet("Sheet 1"); + ColumnHelper columnHelper = sheet.getColumnHelper(); + CTCol col = columnHelper.getOrCreateColumn(3); + assertNotNull(col); + assertNotNull(columnHelper.getColumn(3)); + CTCol col2 = columnHelper.getOrCreateColumn(30); + assertNotNull(col2); + assertNotNull(columnHelper.getColumn(30)); + } + private int countColumns(CTWorksheet worksheet) { int count; count = 0; Index: src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java =================================================================== --- src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java (revisione 7519) +++ src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java (revisione 7589) @@ -19,14 +19,15 @@ import java.util.Iterator; +import junit.framework.TestCase; + import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.Footer; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.helpers.ColumnHelper; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCol; -import junit.framework.TestCase; - public class TestXSSFSheet extends TestCase { public void testRowIterator() { @@ -106,8 +107,8 @@ XSSFWorkbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet 1"); // Test that default height set by the constructor - assertEquals((short) 300, sheet.getDefaultRowHeight()); - assertEquals((float) 15, sheet.getDefaultRowHeightInPoints()); + assertEquals((short) 0, sheet.getDefaultRowHeight()); + assertEquals((float) 0, sheet.getDefaultRowHeightInPoints()); // Set a new default row height in twips and test getting the value in points sheet.setDefaultRowHeight((short) 360); assertEquals((float) 18, sheet.getDefaultRowHeightInPoints()); @@ -120,7 +121,7 @@ XSSFWorkbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet 1"); // Test that default column width set by the constructor - assertEquals((short) 13, sheet.getDefaultColumnWidth()); + assertEquals((short) 0, sheet.getDefaultColumnWidth()); // Set a new default column width and get its value sheet.setDefaultColumnWidth((short) 14); assertEquals((short) 14, sheet.getDefaultColumnWidth()); @@ -322,4 +323,16 @@ sheet.setColumnHidden((short) 2, true); assertTrue(sheet.isColumnHidden((short) 2)); } + + public void testAutoSizeColumn() { + XSSFWorkbook workbook = new XSSFWorkbook(); + XSSFSheet sheet = (XSSFSheet) workbook.createSheet("Sheet 1"); + ColumnHelper columnHelper = sheet.getColumnHelper(); + CTCol col = columnHelper.getColumn(13); + assertNull(col); + sheet.autoSizeColumn((short)13); + col = columnHelper.getColumn(13); + assertNotNull(col); + assertTrue(col.getBestFit()); + } } Index: src/ooxml/testcases/org/apache/poi/xssf/util/TestCellReference.java =================================================================== --- src/ooxml/testcases/org/apache/poi/xssf/util/TestCellReference.java (revisione 0) +++ src/ooxml/testcases/org/apache/poi/xssf/util/TestCellReference.java (revisione 7589) @@ -0,0 +1,117 @@ +/* ==================================================================== + 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.xssf.util; + +import org.apache.poi.xssf.util.CellReference; + +import junit.framework.TestCase; + + +public class TestCellReference extends TestCase { + + public void testGetCellRefParts() { + String cellRef = "A1"; + CellReference cellReference = new CellReference(cellRef); + String[] parts = cellReference.getCellRefParts(cellRef); + assertNotNull(parts); + assertEquals("A", parts[0]); + assertEquals("1", parts[1]); + + cellRef = "AA1"; + cellReference = new CellReference(cellRef); + parts = cellReference.getCellRefParts(cellRef); + assertNotNull(parts); + assertEquals("AA", parts[0]); + assertEquals("1", parts[1]); + + cellRef = "AA100"; + cellReference = new CellReference(cellRef); + parts = cellReference.getCellRefParts(cellRef); + assertNotNull(parts); + assertEquals("AA", parts[0]); + assertEquals("100", parts[1]); + + + cellRef = "AABC10065"; + cellReference = new CellReference(cellRef); + parts = cellReference.getCellRefParts(cellRef); + assertNotNull(parts); + assertEquals("AABC", parts[0]); + assertEquals("10065", parts[1]); + } + + public void testGetColNumFromRef() { + String cellRef = "A1"; + CellReference cellReference = new CellReference(cellRef); + String[] parts = cellReference.getCellRefParts(cellRef); + short col = cellReference.getColNumFromRef(parts[0]); + assertEquals(0, col); + + cellRef = "AB1"; + cellReference = new CellReference(cellRef); + parts = cellReference.getCellRefParts(cellRef); + col = cellReference.getColNumFromRef(parts[0]); + assertEquals(27, col); + + cellRef = "A1100"; + cellReference = new CellReference(cellRef); + parts = cellReference.getCellRefParts(cellRef); + col = cellReference.getColNumFromRef(parts[0]); + assertEquals(0, col); + + cellRef = "BC15"; + cellReference = new CellReference(cellRef); + parts = cellReference.getCellRefParts(cellRef); + col = cellReference.getColNumFromRef(parts[0]); + assertEquals(54, col); + } + + public void testGetRowNumFromRef() { + String cellRef = "A1"; + CellReference cellReference = new CellReference(cellRef); + String[] parts = cellReference.getCellRefParts(cellRef); + int row = cellReference.getRowNumFromRef(parts[1]); + assertEquals(0, row); + + cellRef = "A12"; + cellReference = new CellReference(cellRef); + parts = cellReference.getCellRefParts(cellRef); + row = cellReference.getRowNumFromRef(parts[1]); + assertEquals(11, row); + + cellRef = "AS121"; + cellReference = new CellReference(cellRef); + parts = cellReference.getCellRefParts(cellRef); + row = cellReference.getRowNumFromRef(parts[1]); + assertEquals(120, row); + } + + public void testConvertNumToColString() { + short col = 702; + String collRef = new CellReference().convertNumToColString(col); + assertEquals("AAA", collRef); + System.err.println("***"); + short col2 = 0; + String collRef2 = new CellReference().convertNumToColString(col2); + assertEquals("A", collRef2); + short col3 = 27; + String collRef3 = new CellReference().convertNumToColString(col3); + assertEquals("AB", collRef3); + } + +}