forked from fanruan/easyexcel
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
286 lines
7.6 KiB
286 lines
7.6 KiB
package com.alibaba.excel.metadata; |
|
|
|
import java.math.BigDecimal; |
|
|
|
import com.alibaba.excel.enums.CellDataTypeEnum; |
|
import com.alibaba.excel.util.StringUtils; |
|
|
|
/** |
|
* Excel internal cell data. |
|
* |
|
* <p> |
|
* |
|
* @author Jiaju Zhuang |
|
*/ |
|
public class CellData<T> extends AbstractCell { |
|
private CellDataTypeEnum type; |
|
/** |
|
* {@link CellDataTypeEnum#NUMBER} |
|
*/ |
|
private BigDecimal numberValue; |
|
/** |
|
* {@link CellDataTypeEnum#STRING} and{@link CellDataTypeEnum#ERROR} |
|
*/ |
|
private String stringValue; |
|
/** |
|
* {@link CellDataTypeEnum#BOOLEAN} |
|
*/ |
|
private Boolean booleanValue; |
|
private Boolean formula; |
|
private String formulaValue; |
|
private byte[] imageValue; |
|
/** |
|
* The number formatting.Currently only supported when reading |
|
*/ |
|
private Integer dataFormat; |
|
/** |
|
* The string of number formatting.Currently only supported when reading |
|
*/ |
|
private String dataFormatString; |
|
/** |
|
* The resulting converted data. |
|
*/ |
|
private T data; |
|
|
|
public CellData(CellData<T> other) { |
|
this.type = other.type; |
|
this.numberValue = other.numberValue; |
|
this.stringValue = other.stringValue; |
|
this.booleanValue = other.booleanValue; |
|
this.formula = other.formula; |
|
this.formulaValue = other.formulaValue; |
|
this.imageValue = other.imageValue; |
|
this.dataFormat = other.dataFormat; |
|
this.dataFormatString = other.dataFormatString; |
|
this.data = other.data; |
|
} |
|
|
|
public CellData() {} |
|
|
|
public CellData(T data) { |
|
this.data = data; |
|
} |
|
|
|
public CellData(T data, String formulaValue) { |
|
this.data = data; |
|
this.formula = Boolean.TRUE; |
|
this.formulaValue = formulaValue; |
|
} |
|
|
|
public CellData(String stringValue) { |
|
this(CellDataTypeEnum.STRING, stringValue); |
|
} |
|
|
|
public CellData(CellDataTypeEnum type, String stringValue) { |
|
if (type != CellDataTypeEnum.STRING && type != CellDataTypeEnum.ERROR) { |
|
throw new IllegalArgumentException("Only support CellDataTypeEnum.STRING and CellDataTypeEnum.ERROR"); |
|
} |
|
if (stringValue == null) { |
|
throw new IllegalArgumentException("StringValue can not be null"); |
|
} |
|
this.type = type; |
|
this.stringValue = stringValue; |
|
this.formula = Boolean.FALSE; |
|
} |
|
|
|
public CellData(BigDecimal numberValue) { |
|
if (numberValue == null) { |
|
throw new IllegalArgumentException("DoubleValue can not be null"); |
|
} |
|
this.type = CellDataTypeEnum.NUMBER; |
|
this.numberValue = numberValue; |
|
this.formula = Boolean.FALSE; |
|
} |
|
|
|
public CellData(byte[] imageValue) { |
|
if (imageValue == null) { |
|
throw new IllegalArgumentException("ImageValue can not be null"); |
|
} |
|
this.type = CellDataTypeEnum.IMAGE; |
|
this.imageValue = imageValue; |
|
this.formula = Boolean.FALSE; |
|
} |
|
|
|
public CellData(Boolean booleanValue) { |
|
if (booleanValue == null) { |
|
throw new IllegalArgumentException("BooleanValue can not be null"); |
|
} |
|
this.type = CellDataTypeEnum.BOOLEAN; |
|
this.booleanValue = booleanValue; |
|
this.formula = Boolean.FALSE; |
|
} |
|
|
|
public CellData(CellDataTypeEnum type) { |
|
if (type == null) { |
|
throw new IllegalArgumentException("Type can not be null"); |
|
} |
|
this.type = type; |
|
this.formula = Boolean.FALSE; |
|
} |
|
|
|
public CellDataTypeEnum getType() { |
|
return type; |
|
} |
|
|
|
public void setType(CellDataTypeEnum type) { |
|
this.type = type; |
|
} |
|
|
|
public BigDecimal getNumberValue() { |
|
return numberValue; |
|
} |
|
|
|
public void setNumberValue(BigDecimal numberValue) { |
|
this.numberValue = numberValue; |
|
} |
|
|
|
public String getStringValue() { |
|
return stringValue; |
|
} |
|
|
|
public void setStringValue(String stringValue) { |
|
this.stringValue = stringValue; |
|
} |
|
|
|
public Boolean getBooleanValue() { |
|
return booleanValue; |
|
} |
|
|
|
public void setBooleanValue(Boolean booleanValue) { |
|
this.booleanValue = booleanValue; |
|
} |
|
|
|
public Boolean getFormula() { |
|
return formula; |
|
} |
|
|
|
public void setFormula(Boolean formula) { |
|
this.formula = formula; |
|
} |
|
|
|
public String getFormulaValue() { |
|
return formulaValue; |
|
} |
|
|
|
public void setFormulaValue(String formulaValue) { |
|
this.formulaValue = formulaValue; |
|
} |
|
|
|
public byte[] getImageValue() { |
|
return imageValue; |
|
} |
|
|
|
public void setImageValue(byte[] imageValue) { |
|
this.imageValue = imageValue; |
|
} |
|
|
|
public Integer getDataFormat() { |
|
return dataFormat; |
|
} |
|
|
|
public void setDataFormat(Integer dataFormat) { |
|
this.dataFormat = dataFormat; |
|
} |
|
|
|
public String getDataFormatString() { |
|
return dataFormatString; |
|
} |
|
|
|
public void setDataFormatString(String dataFormatString) { |
|
this.dataFormatString = dataFormatString; |
|
} |
|
|
|
public T getData() { |
|
return data; |
|
} |
|
|
|
public void setData(T data) { |
|
this.data = data; |
|
} |
|
|
|
/** |
|
* Ensure that the object does not appear null |
|
*/ |
|
public void checkEmpty() { |
|
if (type == null) { |
|
type = CellDataTypeEnum.EMPTY; |
|
} |
|
switch (type) { |
|
case STRING: |
|
case ERROR: |
|
if (StringUtils.isEmpty(stringValue)) { |
|
type = CellDataTypeEnum.EMPTY; |
|
} |
|
return; |
|
case NUMBER: |
|
if (numberValue == null) { |
|
type = CellDataTypeEnum.EMPTY; |
|
} |
|
return; |
|
case BOOLEAN: |
|
if (booleanValue == null) { |
|
type = CellDataTypeEnum.EMPTY; |
|
} |
|
return; |
|
default: |
|
} |
|
} |
|
|
|
public static CellData newEmptyInstance() { |
|
return newEmptyInstance(null, null); |
|
} |
|
|
|
public static CellData newEmptyInstance(Integer rowIndex, Integer columnIndex) { |
|
CellData cellData = new CellData(CellDataTypeEnum.EMPTY); |
|
cellData.setRowIndex(rowIndex); |
|
cellData.setColumnIndex(columnIndex); |
|
return cellData; |
|
} |
|
|
|
public static CellData newInstance(Boolean booleanValue) { |
|
return newInstance(booleanValue, null, null); |
|
} |
|
|
|
public static CellData newInstance(Boolean booleanValue, Integer rowIndex, Integer columnIndex) { |
|
CellData cellData = new CellData(booleanValue); |
|
cellData.setRowIndex(rowIndex); |
|
cellData.setColumnIndex(columnIndex); |
|
return cellData; |
|
} |
|
|
|
public static CellData newInstance(String stringValue, Integer rowIndex, Integer columnIndex) { |
|
CellData cellData = new CellData(stringValue); |
|
cellData.setRowIndex(rowIndex); |
|
cellData.setColumnIndex(columnIndex); |
|
return cellData; |
|
} |
|
|
|
public static CellData newInstance(BigDecimal numberValue, Integer rowIndex, Integer columnIndex) { |
|
CellData cellData = new CellData(numberValue); |
|
cellData.setRowIndex(rowIndex); |
|
cellData.setColumnIndex(columnIndex); |
|
return cellData; |
|
} |
|
|
|
@Override |
|
public String toString() { |
|
if (type == null) { |
|
return StringUtils.EMPTY; |
|
} |
|
switch (type) { |
|
case NUMBER: |
|
return numberValue.toString(); |
|
case BOOLEAN: |
|
return booleanValue.toString(); |
|
case DIRECT_STRING: |
|
case STRING: |
|
case ERROR: |
|
return stringValue; |
|
case IMAGE: |
|
return "image[" + imageValue.length + "]"; |
|
default: |
|
return StringUtils.EMPTY; |
|
} |
|
} |
|
|
|
}
|
|
|