whitespace
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1716034 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
cd254f2f1e
commit
2fab3547be
@ -50,239 +50,224 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.TableDocument;
|
|||||||
*/
|
*/
|
||||||
public class XSSFTable extends POIXMLDocumentPart {
|
public class XSSFTable extends POIXMLDocumentPart {
|
||||||
|
|
||||||
private CTTable ctTable;
|
private CTTable ctTable;
|
||||||
private List<XSSFXmlColumnPr> xmlColumnPr;
|
private List<XSSFXmlColumnPr> xmlColumnPr;
|
||||||
private CellReference startCellReference;
|
private CellReference startCellReference;
|
||||||
private CellReference endCellReference;
|
private CellReference endCellReference;
|
||||||
private String commonXPath;
|
private String commonXPath;
|
||||||
|
|
||||||
|
|
||||||
public XSSFTable() {
|
|
||||||
super();
|
|
||||||
ctTable = CTTable.Factory.newInstance();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public XSSFTable(PackagePart part, PackageRelationship rel)
|
public XSSFTable() {
|
||||||
throws IOException {
|
super();
|
||||||
super(part, rel);
|
ctTable = CTTable.Factory.newInstance();
|
||||||
readFrom(part.getInputStream());
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void readFrom(InputStream is) throws IOException {
|
public XSSFTable(PackagePart part, PackageRelationship rel)
|
||||||
try {
|
throws IOException {
|
||||||
TableDocument doc = TableDocument.Factory.parse(is, DEFAULT_XML_OPTIONS);
|
super(part, rel);
|
||||||
ctTable = doc.getTable();
|
readFrom(part.getInputStream());
|
||||||
} catch (XmlException e) {
|
}
|
||||||
throw new IOException(e.getLocalizedMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public XSSFSheet getXSSFSheet(){
|
|
||||||
return (XSSFSheet) getParent();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void writeTo(OutputStream out) throws IOException {
|
public void readFrom(InputStream is) throws IOException {
|
||||||
|
try {
|
||||||
|
TableDocument doc = TableDocument.Factory.parse(is, DEFAULT_XML_OPTIONS);
|
||||||
|
ctTable = doc.getTable();
|
||||||
|
} catch (XmlException e) {
|
||||||
|
throw new IOException(e.getLocalizedMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public XSSFSheet getXSSFSheet(){
|
||||||
|
return (XSSFSheet) getParent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void writeTo(OutputStream out) throws IOException {
|
||||||
updateHeaders();
|
updateHeaders();
|
||||||
|
|
||||||
TableDocument doc = TableDocument.Factory.newInstance();
|
TableDocument doc = TableDocument.Factory.newInstance();
|
||||||
doc.setTable(ctTable);
|
doc.setTable(ctTable);
|
||||||
doc.save(out, DEFAULT_XML_OPTIONS);
|
doc.save(out, DEFAULT_XML_OPTIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void commit() throws IOException {
|
protected void commit() throws IOException {
|
||||||
PackagePart part = getPackagePart();
|
PackagePart part = getPackagePart();
|
||||||
OutputStream out = part.getOutputStream();
|
OutputStream out = part.getOutputStream();
|
||||||
writeTo(out);
|
writeTo(out);
|
||||||
out.close();
|
out.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
public CTTable getCTTable(){
|
public CTTable getCTTable(){
|
||||||
return ctTable;
|
return ctTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if this Table element contains even a single mapping to the map identified by id
|
* Checks if this Table element contains even a single mapping to the map identified by id
|
||||||
* @param id the XSSFMap ID
|
* @param id the XSSFMap ID
|
||||||
* @return true if the Table element contain mappings
|
* @return true if the Table element contain mappings
|
||||||
*/
|
*/
|
||||||
public boolean mapsTo(long id){
|
public boolean mapsTo(long id){
|
||||||
boolean maps =false;
|
boolean maps =false;
|
||||||
|
|
||||||
List<XSSFXmlColumnPr> pointers = getXmlColumnPrs();
|
List<XSSFXmlColumnPr> pointers = getXmlColumnPrs();
|
||||||
|
|
||||||
for(XSSFXmlColumnPr pointer: pointers){
|
for (XSSFXmlColumnPr pointer: pointers) {
|
||||||
if(pointer.getMapId()==id){
|
if (pointer.getMapId()==id) {
|
||||||
maps=true;
|
maps=true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return maps;
|
return maps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Calculates the xpath of the root element for the table. This will be the common part
|
* Calculates the xpath of the root element for the table. This will be the common part
|
||||||
* of all the mapping's xpaths
|
* of all the mapping's xpaths
|
||||||
*
|
*
|
||||||
* @return the xpath of the table's root element
|
* @return the xpath of the table's root element
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public String getCommonXpath() {
|
public String getCommonXpath() {
|
||||||
|
if (commonXPath == null) {
|
||||||
if(commonXPath == null){
|
String[] commonTokens = {};
|
||||||
|
for (CTTableColumn column :ctTable.getTableColumns().getTableColumnArray()) {
|
||||||
String[] commonTokens ={};
|
if (column.getXmlColumnPr()!=null) {
|
||||||
|
String xpath = column.getXmlColumnPr().getXpath();
|
||||||
for(CTTableColumn column :ctTable.getTableColumns().getTableColumnArray()){
|
String[] tokens = xpath.split("/");
|
||||||
if(column.getXmlColumnPr()!=null){
|
if (commonTokens.length==0) {
|
||||||
String xpath = column.getXmlColumnPr().getXpath();
|
commonTokens = tokens;
|
||||||
String[] tokens = xpath.split("/");
|
|
||||||
if(commonTokens.length==0){
|
} else {
|
||||||
commonTokens = tokens;
|
int maxLenght = commonTokens.length>tokens.length? tokens.length:commonTokens.length;
|
||||||
|
for (int i =0; i<maxLenght;i++) {
|
||||||
}else{
|
if (!commonTokens[i].equals(tokens[i])) {
|
||||||
int maxLenght = commonTokens.length>tokens.length? tokens.length:commonTokens.length;
|
List<String> subCommonTokens = Arrays.asList(commonTokens).subList(0, i);
|
||||||
for(int i =0; i<maxLenght;i++){
|
|
||||||
if(!commonTokens[i].equals(tokens[i])){
|
String[] container = {};
|
||||||
List<String> subCommonTokens = Arrays.asList(commonTokens).subList(0, i);
|
|
||||||
|
commonTokens = subCommonTokens.toArray(container);
|
||||||
String[] container = {};
|
break;
|
||||||
|
}
|
||||||
commonTokens = subCommonTokens.toArray(container);
|
}
|
||||||
break;
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
commonXPath ="";
|
|
||||||
|
|
||||||
for(int i = 1 ; i< commonTokens.length;i++){
|
|
||||||
commonXPath +="/"+commonTokens[i];
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return commonXPath;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public List<XSSFXmlColumnPr> getXmlColumnPrs() {
|
|
||||||
|
|
||||||
if(xmlColumnPr==null){
|
|
||||||
xmlColumnPr = new ArrayList<XSSFXmlColumnPr>();
|
|
||||||
for (CTTableColumn column:ctTable.getTableColumns().getTableColumnArray()){
|
|
||||||
if (column.getXmlColumnPr()!=null){
|
|
||||||
XSSFXmlColumnPr columnPr = new XSSFXmlColumnPr(this,column,column.getXmlColumnPr());
|
|
||||||
xmlColumnPr.add(columnPr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return xmlColumnPr;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the name of the Table, if set
|
|
||||||
*/
|
|
||||||
public String getName() {
|
|
||||||
return ctTable.getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Changes the name of the Table
|
|
||||||
*/
|
|
||||||
public void setName(String name) {
|
|
||||||
if(name == null) {
|
|
||||||
ctTable.unsetName();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ctTable.setName(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the display name of the Table, if set
|
|
||||||
*/
|
|
||||||
public String getDisplayName() {
|
|
||||||
return ctTable.getDisplayName();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Changes the display name of the Table
|
|
||||||
*/
|
|
||||||
public void setDisplayName(String name) {
|
|
||||||
ctTable.setDisplayName(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the number of mapped table columns (see Open Office XML Part 4: chapter 3.5.1.4)
|
|
||||||
*/
|
|
||||||
public long getNumerOfMappedColumns(){
|
|
||||||
return ctTable.getTableColumns().getCount();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return The reference for the cell in the top-left part of the table
|
|
||||||
* (see Open Office XML Part 4: chapter 3.5.1.2, attribute ref)
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public CellReference getStartCellReference() {
|
|
||||||
|
|
||||||
if(startCellReference==null){
|
|
||||||
String ref = ctTable.getRef();
|
|
||||||
if(ref != null) {
|
|
||||||
String[] boundaries = ref.split(":");
|
|
||||||
String from = boundaries[0];
|
|
||||||
startCellReference = new CellReference(from);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return startCellReference;
|
|
||||||
}
|
commonXPath = "";
|
||||||
|
for (int i = 1 ; i< commonTokens.length;i++) {
|
||||||
/**
|
commonXPath +="/"+commonTokens[i];
|
||||||
* @return The reference for the cell in the bottom-right part of the table
|
}
|
||||||
* (see Open Office XML Part 4: chapter 3.5.1.2, attribute ref)
|
}
|
||||||
*
|
|
||||||
*/
|
return commonXPath;
|
||||||
public CellReference getEndCellReference() {
|
}
|
||||||
|
|
||||||
if(endCellReference==null){
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
String ref = ctTable.getRef();
|
public List<XSSFXmlColumnPr> getXmlColumnPrs() {
|
||||||
String[] boundaries = ref.split(":");
|
|
||||||
String from = boundaries[1];
|
if (xmlColumnPr==null) {
|
||||||
endCellReference = new CellReference(from);
|
xmlColumnPr = new ArrayList<XSSFXmlColumnPr>();
|
||||||
}
|
for (CTTableColumn column:ctTable.getTableColumns().getTableColumnArray()) {
|
||||||
return endCellReference;
|
if (column.getXmlColumnPr()!=null) {
|
||||||
}
|
XSSFXmlColumnPr columnPr = new XSSFXmlColumnPr(this,column,column.getXmlColumnPr());
|
||||||
|
xmlColumnPr.add(columnPr);
|
||||||
|
}
|
||||||
/**
|
}
|
||||||
* @return the total number of rows in the selection. (Note: in this version autofiltering is ignored)
|
}
|
||||||
*
|
return xmlColumnPr;
|
||||||
*/
|
}
|
||||||
public int getRowCount(){
|
|
||||||
|
/**
|
||||||
|
* @return the name of the Table, if set
|
||||||
CellReference from = getStartCellReference();
|
*/
|
||||||
CellReference to = getEndCellReference();
|
public String getName() {
|
||||||
|
return ctTable.getName();
|
||||||
int rowCount = -1;
|
}
|
||||||
if (from!=null && to!=null){
|
|
||||||
rowCount = to.getRow()-from.getRow();
|
/**
|
||||||
}
|
* Changes the name of the Table
|
||||||
return rowCount;
|
*/
|
||||||
}
|
public void setName(String name) {
|
||||||
|
if (name == null) {
|
||||||
|
ctTable.unsetName();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ctTable.setName(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the display name of the Table, if set
|
||||||
|
*/
|
||||||
|
public String getDisplayName() {
|
||||||
|
return ctTable.getDisplayName();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Changes the display name of the Table
|
||||||
|
*/
|
||||||
|
public void setDisplayName(String name) {
|
||||||
|
ctTable.setDisplayName(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the number of mapped table columns (see Open Office XML Part 4: chapter 3.5.1.4)
|
||||||
|
*/
|
||||||
|
public long getNumerOfMappedColumns() {
|
||||||
|
return ctTable.getTableColumns().getCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return The reference for the cell in the top-left part of the table
|
||||||
|
* (see Open Office XML Part 4: chapter 3.5.1.2, attribute ref)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public CellReference getStartCellReference() {
|
||||||
|
if (startCellReference==null) {
|
||||||
|
String ref = ctTable.getRef();
|
||||||
|
if (ref != null) {
|
||||||
|
String[] boundaries = ref.split(":");
|
||||||
|
String from = boundaries[0];
|
||||||
|
startCellReference = new CellReference(from);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return startCellReference;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return The reference for the cell in the bottom-right part of the table
|
||||||
|
* (see Open Office XML Part 4: chapter 3.5.1.2, attribute ref)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public CellReference getEndCellReference() {
|
||||||
|
if (endCellReference==null) {
|
||||||
|
String ref = ctTable.getRef();
|
||||||
|
String[] boundaries = ref.split(":");
|
||||||
|
String from = boundaries[1];
|
||||||
|
endCellReference = new CellReference(from);
|
||||||
|
}
|
||||||
|
return endCellReference;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the total number of rows in the selection. (Note: in this version autofiltering is ignored)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public int getRowCount() {
|
||||||
|
CellReference from = getStartCellReference();
|
||||||
|
CellReference to = getEndCellReference();
|
||||||
|
|
||||||
|
int rowCount = -1;
|
||||||
|
if (from!=null && to!=null) {
|
||||||
|
rowCount = to.getRow()-from.getRow();
|
||||||
|
}
|
||||||
|
return rowCount;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Synchronize table headers with cell values in the parent sheet.
|
* Synchronize table headers with cell values in the parent sheet.
|
||||||
|
Loading…
Reference in New Issue
Block a user