==================================================================== */
package org.apache.poi.ss.usermodel;
+
+
public interface StylesSource {
public String getNumberFormatAt(long idx);
public long putNumberFormat(String fmt);
}
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;
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
*/
public class XSSFCellStyle implements CellStyle {
+ private int cellXfId;
+ private int cellStyleXfId;
private StylesSource stylesSource;
private CTXf cellXf;
private CTXf cellStyleXf;
* @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);
}
/**
}
public short getIndex() {
- // TODO Auto-generated method stub
- return 0;
+ return (short) this.cellXfId;
}
public short getLeftBorderColor() {
}
public short getColumnWidth(short column) {
- return (short) columnHelper.getColumn(column).getWidth();
+ return (short) columnHelper.getColumn(column, false).getWidth();
}
public short getDefaultColumnWidth() {
}
public boolean isColumnHidden(short column) {
- return columnHelper.getColumn(column).getHidden();
+ return columnHelper.getColumn(column, false).getHidden();
}
public boolean isDisplayFormulas() {
}
public void setDefaultColumnStyle(short column, CellStyle style) {
- // TODO Auto-generated method stub
-
+ columnHelper.setColDefaultStyle(column, style);
}
public void setDefaultColumnWidth(short width) {
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;
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;
}
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);
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;
+ }
+
}
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;
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() {
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;
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());
}
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);
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 {
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() {
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() {
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) {