mirror of https://github.com/apache/poi.git
Tests for XSSFWorkbook.
git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@614199 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
d0ccd710d9
commit
f58b850b97
|
@ -155,8 +155,7 @@ public class XSSFRow implements Row {
|
|||
}
|
||||
|
||||
public int getRowNum() {
|
||||
// TODO Auto-generated method stub
|
||||
return 0;
|
||||
return (int) (row.getR() - 1);
|
||||
}
|
||||
|
||||
public boolean getZeroHeight() {
|
||||
|
@ -188,7 +187,7 @@ public class XSSFRow implements Row {
|
|||
}
|
||||
|
||||
public void setRowNum(int rowNum) {
|
||||
// TODO Auto-generated method stub
|
||||
this.row.setR(rowNum + 1);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
package org.apache.poi.xssf.usermodel;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.poi.hssf.util.PaneInformation;
|
||||
import org.apache.poi.hssf.util.Region;
|
||||
|
@ -44,13 +46,17 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet;
|
|||
public class XSSFSheet implements Sheet {
|
||||
|
||||
private CTSheet sheet;
|
||||
|
||||
private CTWorksheet worksheet;
|
||||
private List<Row> rows;
|
||||
|
||||
public XSSFSheet(CTSheet sheet) {
|
||||
this.sheet = sheet;
|
||||
this.worksheet = CTWorksheet.Factory.newInstance();
|
||||
this.worksheet.addNewSheetData();
|
||||
this.rows = new LinkedList<Row>();
|
||||
for (CTRow row : worksheet.getSheetData().getRowArray()) {
|
||||
this.rows.add(new XSSFRow(row));
|
||||
}
|
||||
// XXX ???
|
||||
CTSheetViews views = this.worksheet.addNewSheetViews();
|
||||
CTSheetView view = views.addNewSheetView();
|
||||
|
@ -109,11 +115,33 @@ public class XSSFSheet implements Sheet {
|
|||
|
||||
}
|
||||
|
||||
protected XSSFRow addRow(int index, int rownum) {
|
||||
CTRow row = this.worksheet.getSheetData().insertNewRow(index);
|
||||
XSSFRow xrow = new XSSFRow(row);
|
||||
xrow.setRowNum(rownum);
|
||||
// xrow.setHeight(13.41);
|
||||
return xrow;
|
||||
}
|
||||
|
||||
public Row createRow(int rownum) {
|
||||
CTRow row = this.worksheet.getSheetData().insertNewRow(rownum);
|
||||
row.setR(rownum + 1);
|
||||
row.setHt(13.41); // XXX ???
|
||||
return new XSSFRow(row);
|
||||
int index = 0;
|
||||
for (Row r : this.rows) {
|
||||
if (r.getRowNum() == rownum) {
|
||||
// Replace r with new row
|
||||
XSSFRow xrow = addRow(index, rownum);
|
||||
rows.set(index, xrow);
|
||||
return xrow;
|
||||
}
|
||||
if (r.getRowNum() > rownum) {
|
||||
XSSFRow xrow = addRow(index, rownum);
|
||||
rows.add(index, xrow);
|
||||
return xrow;
|
||||
}
|
||||
++index;
|
||||
}
|
||||
XSSFRow xrow = addRow(index, rownum);
|
||||
rows.add(xrow);
|
||||
return xrow;
|
||||
}
|
||||
|
||||
public void createSplitPane(int splitPos, int splitPos2, int leftmostColumn, int topRow, int activePane) {
|
||||
|
@ -262,7 +290,12 @@ public class XSSFSheet implements Sheet {
|
|||
}
|
||||
|
||||
public Row getRow(int rownum) {
|
||||
// TODO Auto-generated method stub
|
||||
for (Iterator<Row> it = rowIterator() ; it.hasNext() ; ) {
|
||||
Row row = it.next();
|
||||
if (row.getRowNum() == rownum) {
|
||||
return row;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -371,9 +404,8 @@ public class XSSFSheet implements Sheet {
|
|||
|
||||
}
|
||||
|
||||
public Iterator rowIterator() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
public Iterator<Row> rowIterator() {
|
||||
return rows.iterator();
|
||||
}
|
||||
|
||||
public void setAlternativeExpression(boolean b) {
|
||||
|
@ -546,4 +578,32 @@ public class XSSFSheet implements Sheet {
|
|||
|
||||
}
|
||||
|
||||
public void setTabSelected(boolean flag) {
|
||||
CTSheetViews views = this.worksheet.getSheetViews();
|
||||
for (CTSheetView view : views.getSheetViewArray()) {
|
||||
view.setTabSelected(flag);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isTabSelected() {
|
||||
CTSheetView view = getDefaultSheetView();
|
||||
return view != null && view.getTabSelected();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the default sheet view. This is the last one if the sheet's views, according to sec. 3.3.1.83
|
||||
* of the OOXML spec: "A single sheet view definition. When more than 1 sheet view is defined in the file,
|
||||
* it means that when opening the workbook, each sheet view corresponds to a separate window within the
|
||||
* spreadsheet application, where each window is showing the particular sheet. containing the same
|
||||
* workbookViewId value, the last sheetView definition is loaded, and the others are discarded.
|
||||
* When multiple windows are viewing the same sheet, multiple sheetView elements (with corresponding
|
||||
* workbookView entries) are saved."
|
||||
*/
|
||||
private CTSheetView getDefaultSheetView() {
|
||||
CTSheetViews views = this.worksheet.getSheetViews();
|
||||
if (views == null || views.getSheetViewArray() == null || views.getSheetViewArray().length <= 0) {
|
||||
return null;
|
||||
}
|
||||
return views.getSheetViewArray(views.getSheetViewArray().length - 1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,6 +34,7 @@ import org.apache.poi.ss.usermodel.Name;
|
|||
import org.apache.poi.ss.usermodel.Palette;
|
||||
import org.apache.poi.ss.usermodel.Sheet;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.apache.xmlbeans.XmlObject;
|
||||
import org.apache.xmlbeans.XmlOptions;
|
||||
import org.openxml4j.exceptions.InvalidFormatException;
|
||||
import org.openxml4j.opc.Package;
|
||||
|
@ -63,6 +64,10 @@ public class XSSFWorkbook implements Workbook {
|
|||
this.workbook.addNewSheets();
|
||||
}
|
||||
|
||||
protected CTWorkbook getWorkbook() {
|
||||
return this.workbook;
|
||||
}
|
||||
|
||||
public int addPicture(byte[] pictureData, int format) {
|
||||
// TODO Auto-generated method stub
|
||||
return 0;
|
||||
|
@ -207,8 +212,14 @@ public class XSSFWorkbook implements Workbook {
|
|||
}
|
||||
|
||||
public short getSelectedTab() {
|
||||
// TODO Auto-generated method stub
|
||||
return 0;
|
||||
short i = 0;
|
||||
for (XSSFSheet sheet : this.sheets) {
|
||||
if (sheet.isTabSelected()) {
|
||||
return i;
|
||||
}
|
||||
++i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public Sheet getSheet(String name) {
|
||||
|
@ -217,17 +228,21 @@ public class XSSFWorkbook implements Workbook {
|
|||
}
|
||||
|
||||
public Sheet getSheetAt(int index) {
|
||||
return this.sheets.get(index - 1);
|
||||
return this.sheets.get(index);
|
||||
}
|
||||
|
||||
public int getSheetIndex(String name) {
|
||||
// TODO Auto-generated method stub
|
||||
return 0;
|
||||
CTSheet[] sheets = this.workbook.getSheets().getSheetArray();
|
||||
for (int i = 0 ; i < sheets.length ; ++i) {
|
||||
if (name.equals(sheets[i].getName())) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public int getSheetIndex(Sheet sheet) {
|
||||
// TODO Auto-generated method stub
|
||||
return 0;
|
||||
return this.sheets.indexOf(sheet);
|
||||
}
|
||||
|
||||
public String getSheetName(int sheet) {
|
||||
|
@ -285,9 +300,14 @@ public class XSSFWorkbook implements Workbook {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* We only set one sheet as selected for compatibility with HSSF.
|
||||
*/
|
||||
public void setSelectedTab(short index) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
for (int i = 0 ; i < this.sheets.size() ; ++i) {
|
||||
XSSFSheet sheet = this.sheets.get(i);
|
||||
sheet.setTabSelected(i == index);
|
||||
}
|
||||
}
|
||||
|
||||
public void setSheetName(int sheet, String name) {
|
||||
|
@ -301,8 +321,13 @@ public class XSSFWorkbook implements Workbook {
|
|||
}
|
||||
|
||||
public void setSheetOrder(String sheetname, int pos) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
int idx = getSheetIndex(sheetname);
|
||||
sheets.add(pos, sheets.remove(idx));
|
||||
// Reorder CTSheets
|
||||
XmlObject cts = this.workbook.getSheets().getSheetArray(idx).copy();
|
||||
this.workbook.getSheets().removeSheet(idx);
|
||||
CTSheet newcts = this.workbook.getSheets().insertNewSheet(pos);
|
||||
newcts.set(cts);
|
||||
}
|
||||
|
||||
public void unwriteProtectWorkbook() {
|
||||
|
|
|
@ -0,0 +1,73 @@
|
|||
/* ====================================================================
|
||||
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;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.apache.poi.ss.usermodel.Sheet;
|
||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet;
|
||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook;
|
||||
|
||||
|
||||
public class TestXSSFWorkbook extends TestCase {
|
||||
|
||||
public void testGetSheetIndex() {
|
||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||
Sheet sheet1 = workbook.createSheet("sheet1");
|
||||
Sheet sheet2 = workbook.createSheet("sheet2");
|
||||
assertEquals(0, workbook.getSheetIndex(sheet1));
|
||||
assertEquals(0, workbook.getSheetIndex("sheet1"));
|
||||
assertEquals(1, workbook.getSheetIndex(sheet2));
|
||||
assertEquals(1, workbook.getSheetIndex("sheet2"));
|
||||
assertEquals(-1, workbook.getSheetIndex("noSheet"));
|
||||
}
|
||||
|
||||
public void testSetSheetOrder() throws Exception {
|
||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||
Sheet sheet1 = workbook.createSheet("sheet1");
|
||||
Sheet sheet2 = workbook.createSheet("sheet2");
|
||||
assertSame(sheet1, workbook.getSheetAt(0));
|
||||
assertSame(sheet2, workbook.getSheetAt(1));
|
||||
workbook.setSheetOrder("sheet2", 0);
|
||||
assertSame(sheet2, workbook.getSheetAt(0));
|
||||
assertSame(sheet1, workbook.getSheetAt(1));
|
||||
// Test reordering of CTSheets
|
||||
CTWorkbook ctwb = workbook.getWorkbook();
|
||||
CTSheet[] ctsheets = ctwb.getSheets().getSheetArray();
|
||||
assertEquals("sheet2", ctsheets[0].getName());
|
||||
assertEquals("sheet1", ctsheets[1].getName());
|
||||
|
||||
// Borderline case: only one sheet
|
||||
workbook = new XSSFWorkbook();
|
||||
sheet1 = workbook.createSheet("sheet1");
|
||||
assertSame(sheet1, workbook.getSheetAt(0));
|
||||
workbook.setSheetOrder("sheet1", 0);
|
||||
assertSame(sheet1, workbook.getSheetAt(0));
|
||||
}
|
||||
|
||||
public void testSetSelectedTab() throws Exception {
|
||||
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||
Sheet sheet1 = workbook.createSheet("sheet1");
|
||||
Sheet sheet2 = workbook.createSheet("sheet2");
|
||||
assertEquals(-1, workbook.getSelectedTab());
|
||||
workbook.setSelectedTab((short) 0);
|
||||
assertEquals(0, workbook.getSelectedTab());
|
||||
workbook.setSelectedTab((short) 1);
|
||||
assertEquals(1, workbook.getSelectedTab());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue