ColumnHelper get/setColDefaultStyle; XSSFSheet setDefaultColumnStyle; XSSFCellStyle constructor refactored abd getIndex method implemented; StyesTable get/setCellXf and get/setCellStyleXf. + tests

git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@646668 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Paolo Mottadelli 2008-04-10 07:35:47 +00:00
parent e545961728
commit 32401dd168
9 changed files with 162 additions and 46 deletions

View File

@ -16,6 +16,8 @@
==================================================================== */
package org.apache.poi.ss.usermodel;
public interface StylesSource {
public String getNumberFormatAt(long idx);
public long putNumberFormat(String fmt);

View File

@ -168,15 +168,14 @@ public class StylesTable implements StylesSource, XSSFModel {
}
public CellStyle getStyleAt(long idx) {
CTXf mainXf = xfs.get((int)idx);
CTXf styleXf = null;
int styleXfId = 0;
// 0 is the empty default
if(mainXf.getXfId() > 0) {
styleXf = styleXfs.get((int)mainXf.getXfId());
if(xfs.get((int) idx).getXfId() > 0) {
styleXfId = (int) xfs.get((int) idx).getXfId();
}
return new XSSFCellStyle(mainXf, styleXf, this);
return new XSSFCellStyle((int) idx, styleXfId, this);
}
public synchronized long putStyle(CellStyle style) {
XSSFCellStyle xStyle = (XSSFCellStyle)style;
@ -201,6 +200,22 @@ public class StylesTable implements StylesSource, XSSFModel {
public long putFill(XSSFCellFill fill) {
return putFill(fill, fills);
}
public CTXf getCellXfAt(long idx) {
return xfs.get((int) idx);
}
public long putCellXf(CTXf cellXf) {
xfs.add(cellXf);
return xfs.size();
}
public CTXf getCellStyleXfAt(long idx) {
return styleXfs.get((int) idx);
}
public long putCellStyleXf(CTXf cellStyleXf) {
styleXfs.add(cellStyleXf);
return styleXfs.size();
}
/**
* For unit testing only
*/

View File

@ -36,6 +36,8 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.STVerticalAlignment;
public class XSSFCellStyle implements CellStyle {
private int cellXfId;
private int cellStyleXfId;
private StylesSource stylesSource;
private CTXf cellXf;
private CTXf cellStyleXf;
@ -50,10 +52,12 @@ public class XSSFCellStyle implements CellStyle {
* @param cellStyleXf Optional, style xf
* @param stylesSource Styles Source to work off
*/
public XSSFCellStyle(CTXf cellXf, CTXf cellStyleXf, StylesSource stylesSource) {
public XSSFCellStyle(int cellXfId, int cellStyleXfId, StylesTable stylesSource) {
this.cellXfId = cellXfId;
this.cellStyleXfId = cellStyleXfId;
this.stylesSource = stylesSource;
this.cellXf = cellXf;
this.cellStyleXf = cellStyleXf;
this.cellXf = stylesSource.getCellXfAt(this.cellXfId);
this.cellStyleXf = stylesSource.getCellStyleXfAt(this.cellStyleXfId);
}
/**
@ -168,8 +172,7 @@ public class XSSFCellStyle implements CellStyle {
}
public short getIndex() {
// TODO Auto-generated method stub
return 0;
return (short) this.cellXfId;
}
public short getLeftBorderColor() {

View File

@ -313,7 +313,7 @@ public class XSSFSheet implements Sheet {
}
public short getColumnWidth(short column) {
return (short) columnHelper.getColumn(column).getWidth();
return (short) columnHelper.getColumn(column, false).getWidth();
}
public short getDefaultColumnWidth() {
@ -592,7 +592,7 @@ public class XSSFSheet implements Sheet {
}
public boolean isColumnHidden(short column) {
return columnHelper.getColumn(column).getHidden();
return columnHelper.getColumn(column, false).getHidden();
}
public boolean isDisplayFormulas() {
@ -724,8 +724,7 @@ public class XSSFSheet implements Sheet {
}
public void setDefaultColumnStyle(short column, CellStyle style) {
// TODO Auto-generated method stub
columnHelper.setColDefaultStyle(column, style);
}
public void setDefaultColumnWidth(short width) {

View File

@ -19,6 +19,7 @@ package org.apache.poi.xssf.usermodel.helpers;
import java.util.Arrays;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.xssf.util.CTColComparator;
import org.apache.poi.xssf.util.NumericRanges;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCol;
@ -69,10 +70,22 @@ public class ColumnHelper {
return newCol;
}
public CTCol getColumn(long index) {
for (int i = 0; i < worksheet.getColsArray(0).sizeOfColArray(); i++) {
if (worksheet.getColsArray(0).getColArray(i).getMin() == index) {
return worksheet.getColsArray(0).getColArray(i);
public CTCol getColumn(long index, boolean splitColumns) {
CTCols colsArray = worksheet.getColsArray(0);
for (int i = 0; i < colsArray.sizeOfColArray(); i++) {
CTCol colArray = colsArray.getColArray(i);
if (colArray.getMin() <= index && colArray.getMax() >= index) {
if (splitColumns) {
if (colArray.getMin() < index) {
insertCol(colsArray, colArray.getMin(), (index - 1), new CTCol[]{colArray});
}
if (colArray.getMax() > index) {
insertCol(colsArray, (index + 1), colArray.getMax(), new CTCol[]{colArray});
}
colArray.setMin(index);
colArray.setMax(index);
}
return colArray;
}
}
return null;
@ -169,34 +182,29 @@ public class ColumnHelper {
}
public void setColumnAttributes(CTCol fromCol, CTCol toCol) {
if (fromCol.getWidth() != 0) {
toCol.setWidth(fromCol.getWidth());
}
if (fromCol.getHidden()) {
toCol.setHidden(true);
}
if (fromCol.getBestFit()) {
toCol.setBestFit(true);
}
toCol.setWidth(fromCol.getWidth());
toCol.setHidden(fromCol.getHidden());
toCol.setBestFit(fromCol.getBestFit());
toCol.setStyle(fromCol.getStyle());
}
public void setColBestFit(long index, boolean bestFit) {
CTCol col = getOrCreateColumn(index);
CTCol col = getOrCreateColumn(index, false);
col.setBestFit(bestFit);
}
public void setColWidth(long index, double width) {
CTCol col = getOrCreateColumn(index);
CTCol col = getOrCreateColumn(index, false);
col.setWidth(width);
}
public void setColHidden(long index, boolean hidden) {
CTCol col = getOrCreateColumn(index);
CTCol col = getOrCreateColumn(index, false);
col.setHidden(hidden);
}
protected CTCol getOrCreateColumn(long index) {
CTCol col = getColumn(index);
protected CTCol getOrCreateColumn(long index, boolean splitColumns) {
CTCol col = getColumn(index, splitColumns);
if (col == null) {
col = worksheet.getColsArray(0).addNewCol();
col.setMin(index);
@ -205,4 +213,21 @@ public class ColumnHelper {
return col;
}
public void setColDefaultStyle(long index, CellStyle style) {
setColDefaultStyle(index, style.getIndex());
}
public void setColDefaultStyle(long index, int styleId) {
CTCol col = getOrCreateColumn(index, true);
col.setStyle(styleId);
}
// Returns -1 if no column is found for the given index
public int getColDefaultStyle(long index) {
if (getColumn(index, false) != null) {
return (int) getColumn(index, false).getStyle();
}
return -1;
}
}

View File

@ -20,9 +20,11 @@ package org.apache.poi.xssf.model;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXf;
import junit.framework.TestCase;

View File

@ -81,7 +81,9 @@ public class TestXSSFCellStyle extends TestCase {
cellXfs = ctStylesheet.addNewCellXfs();
cellXf = cellXfs.addNewXf();
cellXf.setXfId(1);
cellStyle = new XSSFCellStyle(cellXf, cellStyleXf, stylesTable);
stylesTable.putCellStyleXf(cellStyleXf);
stylesTable.putCellXf(cellXf);
cellStyle = new XSSFCellStyle(1, 1, stylesTable);
}
public void testGetSetBorderBottom() {

View File

@ -25,12 +25,15 @@ import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.Region;
import org.apache.poi.xssf.model.CommentsTable;
import org.apache.poi.xssf.model.StylesTable;
import org.apache.poi.xssf.usermodel.helpers.ColumnHelper;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCol;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCols;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTComment;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTComments;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXf;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STPane;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STPaneState;
@ -338,10 +341,10 @@ public class TestXSSFSheet extends TestCase {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = (XSSFSheet) workbook.createSheet("Sheet 1");
ColumnHelper columnHelper = sheet.getColumnHelper();
CTCol col = columnHelper.getColumn(13);
CTCol col = columnHelper.getColumn(13, false);
assertNull(col);
sheet.autoSizeColumn((short)13);
col = columnHelper.getColumn(13);
col = columnHelper.getColumn(13, false);
assertNotNull(col);
assertTrue(col.getBestFit());
}
@ -591,6 +594,35 @@ public class TestXSSFSheet extends TestCase {
assertEquals(0, sheet.getNumMergedRegions());
}
public void testSetDefaultColumnStyle() {
XSSFWorkbook workbook = new XSSFWorkbook();
CTSheet ctSheet = CTSheet.Factory.newInstance();
CTWorksheet ctWorksheet = CTWorksheet.Factory.newInstance();
XSSFSheet sheet = new XSSFSheet(ctSheet, ctWorksheet, (XSSFWorkbook) workbook);
StylesTable stylesTable = (StylesTable) workbook.getStylesSource();
XSSFFont font = new XSSFFont();
font.setFontName("Cambria");
stylesTable.putFont(font);
CTXf cellStyleXf = CTXf.Factory.newInstance();
cellStyleXf.setFontId(1);
cellStyleXf.setFillId(0);
cellStyleXf.setBorderId(0);
cellStyleXf.setNumFmtId(0);
stylesTable.putCellStyleXf(cellStyleXf);
CTXf cellXf = CTXf.Factory.newInstance();
cellXf.setXfId(1);
stylesTable.putCellXf(cellXf);
XSSFCellStyle cellStyle = new XSSFCellStyle(1, 1, stylesTable);
assertEquals(1, cellStyle.getFontIndex());
sheet.setDefaultColumnStyle((short) 3, cellStyle);
assertEquals(1, ctWorksheet.getColsArray(0).getColArray(0).getStyle());
XSSFRow row = (XSSFRow) sheet.createRow(0);
XSSFCell cell = (XSSFCell) sheet.getRow(0).createCell(3);
System.out.println(cell.getCellStyle());
}
private XSSFSheet createSheet(XSSFWorkbook workbook, String name) {
XSSFSheet sheet = (XSSFSheet) workbook.createSheet(name);

View File

@ -19,11 +19,15 @@ package org.apache.poi.xssf.usermodel.helpers;
import junit.framework.TestCase;
import org.apache.poi.xssf.model.StylesTable;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
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.CTSheet;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXf;
public class TestColumnHelper extends TestCase {
@ -53,8 +57,8 @@ public class TestColumnHelper extends TestCase {
assertEquals(1, worksheet.sizeOfColsArray());
count = countColumns(worksheet);
assertEquals(16375, count);
assertEquals((double) 88, helper.getColumn(1).getWidth());
assertTrue(helper.getColumn(1).getHidden());
assertEquals((double) 88, helper.getColumn(1, false).getWidth());
assertTrue(helper.getColumn(1, false).getHidden());
}
public void testSortColumns() {
@ -196,11 +200,12 @@ public class TestColumnHelper extends TestCase {
col4.setMax(6);
ColumnHelper helper = new ColumnHelper(worksheet);
assertNotNull(helper.getColumn(1));
assertEquals((double) 88, helper.getColumn(1).getWidth());
assertTrue(helper.getColumn(1).getHidden());
assertFalse(helper.getColumn(2).getHidden());
assertNull(helper.getColumn(99));
assertNotNull(helper.getColumn(1, false));
assertEquals((double) 88, helper.getColumn(1, false).getWidth());
assertTrue(helper.getColumn(1, false).getHidden());
assertFalse(helper.getColumn(2, false).getHidden());
assertNull(helper.getColumn(99, false));
assertNotNull(helper.getColumn(5, false));
}
public void testSetColumnAttributes() {
@ -221,13 +226,44 @@ public class TestColumnHelper extends TestCase {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = (XSSFSheet) workbook.createSheet("Sheet 1");
ColumnHelper columnHelper = sheet.getColumnHelper();
CTCol col = columnHelper.getOrCreateColumn(3);
CTCol col = columnHelper.getOrCreateColumn(3, false);
assertNotNull(col);
assertNotNull(columnHelper.getColumn(3));
assertNotNull(columnHelper.getColumn(3, false));
CTCol col2 = columnHelper.getOrCreateColumn(30);
CTCol col2 = columnHelper.getOrCreateColumn(30, false);
assertNotNull(col2);
assertNotNull(columnHelper.getColumn(30));
assertNotNull(columnHelper.getColumn(30, false));
}
public void testGetSetColDefaultStyle() {
XSSFWorkbook workbook = new XSSFWorkbook();
CTSheet ctSheet = CTSheet.Factory.newInstance();
CTWorksheet ctWorksheet = CTWorksheet.Factory.newInstance();
XSSFSheet sheet = new XSSFSheet(ctSheet, ctWorksheet, (XSSFWorkbook) workbook);
ColumnHelper columnHelper = sheet.getColumnHelper();
CTCol col = columnHelper.getOrCreateColumn(3, false);
assertNotNull(col);
assertNotNull(columnHelper.getColumn(3, false));
columnHelper.setColDefaultStyle(3, 2);
assertEquals(2, columnHelper.getColDefaultStyle(3));
assertEquals(-1, columnHelper.getColDefaultStyle(4));
StylesTable stylesTable = (StylesTable) workbook.getStylesSource();
CTXf cellXf = CTXf.Factory.newInstance();
cellXf.setFontId(0);
cellXf.setFillId(0);
cellXf.setBorderId(0);
cellXf.setNumFmtId(0);
cellXf.setXfId(0);
stylesTable.putCellXf(cellXf);
CTCol col_2 = ctWorksheet.getColsArray(0).addNewCol();
col_2.setMin(10);
col_2.setMax(12);
col_2.setStyle(1);
assertEquals(1, columnHelper.getColDefaultStyle(11));
XSSFCellStyle cellStyle = new XSSFCellStyle(0, 0, stylesTable);
columnHelper.setColDefaultStyle(11, cellStyle);
assertEquals(0, col_2.getStyle());
assertEquals(1, columnHelper.getColDefaultStyle(10));
}
private int countColumns(CTWorksheet worksheet) {