mirror of https://github.com/alibaba/easyexcel
Jiaju Zhuang
4 years ago
140 changed files with 937 additions and 2242 deletions
@ -1,36 +1,9 @@
|
||||
package com.alibaba.excel.converters; |
||||
|
||||
import com.alibaba.excel.enums.CellDataTypeEnum; |
||||
import com.alibaba.excel.metadata.CellData; |
||||
import com.alibaba.excel.metadata.GlobalConfiguration; |
||||
import com.alibaba.excel.metadata.property.ExcelContentProperty; |
||||
|
||||
/** |
||||
* An empty converter.It's automatically converted by type. |
||||
* |
||||
* @author Jiaju Zhuang |
||||
*/ |
||||
public class AutoConverter implements Converter<Object> { |
||||
|
||||
@Override |
||||
public Class<?> supportJavaTypeKey() { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public CellDataTypeEnum supportExcelTypeKey() { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public Object convertToJavaData(CellData<?> cellData, ExcelContentProperty contentProperty, |
||||
GlobalConfiguration globalConfiguration) { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public CellData<?> convertToExcelData(Object value, ExcelContentProperty contentProperty, |
||||
GlobalConfiguration globalConfiguration) { |
||||
return null; |
||||
} |
||||
} |
||||
|
@ -0,0 +1,30 @@
|
||||
package com.alibaba.excel.converters; |
||||
|
||||
import com.alibaba.excel.context.AnalysisContext; |
||||
import com.alibaba.excel.metadata.data.ReadCellData; |
||||
import com.alibaba.excel.metadata.property.ExcelContentProperty; |
||||
|
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Data; |
||||
|
||||
/** |
||||
* read converter context |
||||
* |
||||
* @author Jiaju Zhuang |
||||
*/ |
||||
@Data |
||||
@AllArgsConstructor |
||||
public class ReadConverterContext<T> { |
||||
/** |
||||
* Excel cell data.NotNull. |
||||
*/ |
||||
private ReadCellData<T> readCellData; |
||||
/** |
||||
* Content property.Nullable. |
||||
*/ |
||||
private ExcelContentProperty contentProperty; |
||||
/** |
||||
* context.NotNull. |
||||
*/ |
||||
private AnalysisContext analysisContext; |
||||
} |
@ -0,0 +1,31 @@
|
||||
package com.alibaba.excel.converters; |
||||
|
||||
import com.alibaba.excel.context.WriteContext; |
||||
import com.alibaba.excel.metadata.property.ExcelContentProperty; |
||||
|
||||
import lombok.Data; |
||||
|
||||
/** |
||||
* write converter context |
||||
* |
||||
* @author Jiaju Zhuang |
||||
*/ |
||||
@Data |
||||
@AllArgsConstructor |
||||
public class WriteConverterContext<T> { |
||||
|
||||
/** |
||||
* Java Data.NotNull. |
||||
*/ |
||||
private T value; |
||||
|
||||
/** |
||||
* Content property.Nullable. |
||||
*/ |
||||
private ExcelContentProperty contentProperty; |
||||
|
||||
/** |
||||
* write context |
||||
*/ |
||||
private WriteContext writeContext; |
||||
} |
@ -1,38 +0,0 @@
|
||||
package com.alibaba.excel.event; |
||||
|
||||
import org.apache.poi.ss.usermodel.Cell; |
||||
import org.apache.poi.ss.usermodel.Row; |
||||
import org.apache.poi.ss.usermodel.Sheet; |
||||
|
||||
/** |
||||
* |
||||
* @author jipengfei |
||||
* @deprecated please use {@link com.alibaba.excel.write.handler.WriteHandler} |
||||
*/ |
||||
@Deprecated |
||||
public interface WriteHandler { |
||||
|
||||
/** |
||||
* Custom operation after creating each sheet |
||||
* |
||||
* @param sheetNo |
||||
* @param sheet |
||||
*/ |
||||
void sheet(int sheetNo, Sheet sheet); |
||||
|
||||
/** |
||||
* Custom operation after creating each row |
||||
* |
||||
* @param rowNum |
||||
* @param row |
||||
*/ |
||||
void row(int rowNum, Row row); |
||||
|
||||
/** |
||||
* Custom operation after creating each cell |
||||
* |
||||
* @param cellNum |
||||
* @param cell |
||||
*/ |
||||
void cell(int cellNum, Cell cell); |
||||
} |
@ -1,40 +0,0 @@
|
||||
package com.alibaba.excel.metadata; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
import org.apache.poi.ss.usermodel.CellStyle; |
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnore; |
||||
|
||||
/** |
||||
* Excel基础模型 |
||||
* |
||||
* @author jipengfei |
||||
* @deprecated Now you don't need to extend any classes |
||||
*/ |
||||
@Deprecated |
||||
public class BaseRowModel { |
||||
|
||||
/** |
||||
* 每列样式 |
||||
*/ |
||||
@ExcelIgnore |
||||
private Map<Integer, CellStyle> cellStyleMap = new HashMap<Integer, CellStyle>(); |
||||
|
||||
public void addStyle(Integer row, CellStyle cellStyle) { |
||||
cellStyleMap.put(row, cellStyle); |
||||
} |
||||
|
||||
public CellStyle getStyle(Integer row) { |
||||
return cellStyleMap.get(row); |
||||
} |
||||
|
||||
public Map<Integer, CellStyle> getCellStyleMap() { |
||||
return cellStyleMap; |
||||
} |
||||
|
||||
public void setCellStyleMap(Map<Integer, CellStyle> cellStyleMap) { |
||||
this.cellStyleMap = cellStyleMap; |
||||
} |
||||
} |
@ -1,193 +0,0 @@
|
||||
package com.alibaba.excel.metadata; |
||||
|
||||
import java.math.BigDecimal; |
||||
import java.util.Date; |
||||
|
||||
import com.alibaba.excel.annotation.write.style.ImagePosition; |
||||
import com.alibaba.excel.enums.CellDataTypeEnum; |
||||
import com.alibaba.excel.metadata.property.ImagePositionProperty; |
||||
import com.alibaba.excel.util.StringUtils; |
||||
import com.alibaba.excel.write.metadata.style.WriteCellStyle; |
||||
|
||||
import lombok.Data; |
||||
import org.apache.poi.ss.usermodel.Comment; |
||||
import org.apache.poi.ss.usermodel.Hyperlink; |
||||
import org.apache.poi.ss.usermodel.RichTextString; |
||||
|
||||
/** |
||||
* Excel internal cell data. |
||||
* |
||||
* <p> |
||||
* |
||||
* @author Jiaju Zhuang |
||||
*/ |
||||
@Data |
||||
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; |
||||
|
||||
/** |
||||
* The resulting converted data. |
||||
*/ |
||||
private T data; |
||||
|
||||
/** |
||||
* formula |
||||
*/ |
||||
private FormulaData formulaData; |
||||
/** |
||||
* data format |
||||
*/ |
||||
private DataFormat dataFormat; |
||||
|
||||
public CellData() {} |
||||
|
||||
public CellData(T data) { |
||||
this.data = data; |
||||
} |
||||
|
||||
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; |
||||
} |
||||
|
||||
public CellData(BigDecimal numberValue) { |
||||
if (numberValue == null) { |
||||
throw new IllegalArgumentException("DoubleValue can not be null"); |
||||
} |
||||
this.type = CellDataTypeEnum.NUMBER; |
||||
this.numberValue = numberValue; |
||||
} |
||||
|
||||
public CellData(byte[] imageValue) { |
||||
if (imageValue == null) { |
||||
throw new IllegalArgumentException("ImageValue can not be null"); |
||||
} |
||||
this.type = CellDataTypeEnum.IMAGE; |
||||
this.imageValue = imageValue; |
||||
} |
||||
|
||||
public CellData(byte[] imageValue, ImagePosition imagePosition) { |
||||
if (imageValue == null) { |
||||
throw new IllegalArgumentException("ImageValue can not be null"); |
||||
} |
||||
if (imagePosition == null) { |
||||
throw new IllegalArgumentException("ImagePosition can not be null"); |
||||
} |
||||
this.type = CellDataTypeEnum.IMAGE; |
||||
this.imageValue = imageValue; |
||||
this.imagePositionProperty = ImagePositionProperty.build(imagePosition); |
||||
this.useImagePositionProperty = true; |
||||
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; |
||||
} |
||||
|
||||
public CellData(Date dateValue) { |
||||
if (dateValue == null) { |
||||
throw new IllegalArgumentException("DateValue can not be null"); |
||||
} |
||||
this.type = CellDataTypeEnum.DATE; |
||||
this.dateValue = dateValue; |
||||
this.formula = Boolean.FALSE; |
||||
} |
||||
|
||||
public CellData(CellDataTypeEnum type) { |
||||
if (type == null) { |
||||
throw new IllegalArgumentException("Type can not be null"); |
||||
} |
||||
this.type = type; |
||||
} |
||||
|
||||
/** |
||||
* 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; |
||||
} |
||||
|
||||
} |
@ -1,10 +0,0 @@
|
||||
package com.alibaba.excel.metadata; |
||||
|
||||
/** |
||||
* TODO |
||||
* |
||||
* @author Jiaju Zhuang |
||||
*/ |
||||
public class HyperlinkData { |
||||
|
||||
} |
@ -1,13 +0,0 @@
|
||||
package com.alibaba.excel.metadata; |
||||
|
||||
import lombok.Data; |
||||
|
||||
/** |
||||
* TODO |
||||
* |
||||
* @author Jiaju Zhuang |
||||
*/ |
||||
@Data |
||||
public class ReadCellData<T> extends CellData<T>{ |
||||
|
||||
} |
@ -1,162 +0,0 @@
|
||||
package com.alibaba.excel.metadata; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* |
||||
* @author jipengfei |
||||
* @deprecated pleas use {@link com.alibaba.excel.write.metadata.WriteSheet} or |
||||
* {@link com.alibaba.excel.read.metadata.ReadSheet} |
||||
*/ |
||||
@Deprecated |
||||
public class Sheet { |
||||
|
||||
/** |
||||
*/ |
||||
private int headLineMun; |
||||
|
||||
/** |
||||
* Starting from 1 |
||||
*/ |
||||
private int sheetNo; |
||||
|
||||
/** |
||||
*/ |
||||
private String sheetName; |
||||
|
||||
/** |
||||
*/ |
||||
private Class<? extends BaseRowModel> clazz; |
||||
|
||||
/** |
||||
*/ |
||||
private List<List<String>> head; |
||||
|
||||
/** |
||||
* |
||||
*/ |
||||
private TableStyle tableStyle; |
||||
|
||||
/** |
||||
* column with |
||||
*/ |
||||
private Map<Integer, Integer> columnWidthMap = new HashMap<Integer, Integer>(); |
||||
|
||||
/** |
||||
* |
||||
*/ |
||||
private Boolean autoWidth = Boolean.FALSE; |
||||
|
||||
/** |
||||
* |
||||
*/ |
||||
private int startRow = 0; |
||||
|
||||
public Sheet(int sheetNo) { |
||||
this.sheetNo = sheetNo; |
||||
} |
||||
|
||||
public Sheet(int sheetNo, int headLineMun) { |
||||
this.sheetNo = sheetNo; |
||||
this.headLineMun = headLineMun; |
||||
} |
||||
|
||||
public Sheet(int sheetNo, int headLineMun, Class<? extends BaseRowModel> clazz) { |
||||
this.sheetNo = sheetNo; |
||||
this.headLineMun = headLineMun; |
||||
this.clazz = clazz; |
||||
} |
||||
|
||||
public Sheet(int sheetNo, int headLineMun, Class<? extends BaseRowModel> clazz, String sheetName, |
||||
List<List<String>> head) { |
||||
this.sheetNo = sheetNo; |
||||
this.clazz = clazz; |
||||
this.headLineMun = headLineMun; |
||||
this.sheetName = sheetName; |
||||
this.head = head; |
||||
} |
||||
|
||||
public List<List<String>> getHead() { |
||||
return head; |
||||
} |
||||
|
||||
public void setHead(List<List<String>> head) { |
||||
this.head = head; |
||||
} |
||||
|
||||
public Class<? extends BaseRowModel> getClazz() { |
||||
return clazz; |
||||
} |
||||
|
||||
public void setClazz(Class<? extends BaseRowModel> clazz) { |
||||
this.clazz = clazz; |
||||
if (headLineMun == 0) { |
||||
this.headLineMun = 1; |
||||
} |
||||
} |
||||
|
||||
public int getHeadLineMun() { |
||||
return headLineMun; |
||||
} |
||||
|
||||
public void setHeadLineMun(int headLineMun) { |
||||
this.headLineMun = headLineMun; |
||||
} |
||||
|
||||
public int getSheetNo() { |
||||
return sheetNo; |
||||
} |
||||
|
||||
public void setSheetNo(int sheetNo) { |
||||
this.sheetNo = sheetNo; |
||||
} |
||||
|
||||
public String getSheetName() { |
||||
return sheetName; |
||||
} |
||||
|
||||
public void setSheetName(String sheetName) { |
||||
this.sheetName = sheetName; |
||||
} |
||||
|
||||
public TableStyle getTableStyle() { |
||||
return tableStyle; |
||||
} |
||||
|
||||
public void setTableStyle(TableStyle tableStyle) { |
||||
this.tableStyle = tableStyle; |
||||
} |
||||
|
||||
public Map<Integer, Integer> getColumnWidthMap() { |
||||
return columnWidthMap; |
||||
} |
||||
|
||||
public void setColumnWidthMap(Map<Integer, Integer> columnWidthMap) { |
||||
this.columnWidthMap = columnWidthMap; |
||||
} |
||||
|
||||
@Override |
||||
public String toString() { |
||||
return "Sheet{" + "headLineMun=" + headLineMun + ", sheetNo=" + sheetNo + ", sheetName='" + sheetName + '\'' |
||||
+ ", clazz=" + clazz + ", head=" + head + ", tableStyle=" + tableStyle + ", columnWidthMap=" |
||||
+ columnWidthMap + '}'; |
||||
} |
||||
|
||||
public Boolean getAutoWidth() { |
||||
return autoWidth; |
||||
} |
||||
|
||||
public void setAutoWidth(Boolean autoWidth) { |
||||
this.autoWidth = autoWidth; |
||||
} |
||||
|
||||
public int getStartRow() { |
||||
return startRow; |
||||
} |
||||
|
||||
public void setStartRow(int startRow) { |
||||
this.startRow = startRow; |
||||
} |
||||
} |
@ -1,62 +0,0 @@
|
||||
package com.alibaba.excel.metadata; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* @author jipengfei |
||||
* @deprecated please use {@link com.alibaba.excel.write.metadata.WriteTable} |
||||
*/ |
||||
@Deprecated |
||||
public class Table { |
||||
/** |
||||
*/ |
||||
private Class<? extends BaseRowModel> clazz; |
||||
|
||||
/** |
||||
*/ |
||||
private List<List<String>> head; |
||||
|
||||
/** |
||||
*/ |
||||
private int tableNo; |
||||
|
||||
/** |
||||
*/ |
||||
private TableStyle tableStyle; |
||||
|
||||
public Table(Integer tableNo) { |
||||
this.tableNo = tableNo; |
||||
} |
||||
|
||||
public TableStyle getTableStyle() { |
||||
return tableStyle; |
||||
} |
||||
|
||||
public void setTableStyle(TableStyle tableStyle) { |
||||
this.tableStyle = tableStyle; |
||||
} |
||||
|
||||
public Class<? extends BaseRowModel> getClazz() { |
||||
return clazz; |
||||
} |
||||
|
||||
public void setClazz(Class<? extends BaseRowModel> clazz) { |
||||
this.clazz = clazz; |
||||
} |
||||
|
||||
public List<List<String>> getHead() { |
||||
return head; |
||||
} |
||||
|
||||
public void setHead(List<List<String>> head) { |
||||
this.head = head; |
||||
} |
||||
|
||||
public int getTableNo() { |
||||
return tableNo; |
||||
} |
||||
|
||||
public void setTableNo(int tableNo) { |
||||
this.tableNo = tableNo; |
||||
} |
||||
} |
@ -1,65 +0,0 @@
|
||||
package com.alibaba.excel.metadata; |
||||
|
||||
import org.apache.poi.ss.usermodel.IndexedColors; |
||||
|
||||
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; |
||||
|
||||
/** |
||||
* @author jipengfei |
||||
* @deprecated please use {@link HorizontalCellStyleStrategy} |
||||
*/ |
||||
@Deprecated |
||||
public class TableStyle { |
||||
|
||||
/** |
||||
* 表头背景颜色 |
||||
*/ |
||||
private IndexedColors tableHeadBackGroundColor; |
||||
|
||||
/** |
||||
* 表头字体样式 |
||||
*/ |
||||
private Font tableHeadFont; |
||||
|
||||
/** |
||||
* 表格内容字体样式 |
||||
*/ |
||||
private Font tableContentFont; |
||||
|
||||
/** |
||||
* 表格内容背景颜色 |
||||
*/ |
||||
private IndexedColors tableContentBackGroundColor; |
||||
|
||||
public IndexedColors getTableHeadBackGroundColor() { |
||||
return tableHeadBackGroundColor; |
||||
} |
||||
|
||||
public void setTableHeadBackGroundColor(IndexedColors tableHeadBackGroundColor) { |
||||
this.tableHeadBackGroundColor = tableHeadBackGroundColor; |
||||
} |
||||
|
||||
public Font getTableHeadFont() { |
||||
return tableHeadFont; |
||||
} |
||||
|
||||
public void setTableHeadFont(Font tableHeadFont) { |
||||
this.tableHeadFont = tableHeadFont; |
||||
} |
||||
|
||||
public Font getTableContentFont() { |
||||
return tableContentFont; |
||||
} |
||||
|
||||
public void setTableContentFont(Font tableContentFont) { |
||||
this.tableContentFont = tableContentFont; |
||||
} |
||||
|
||||
public IndexedColors getTableContentBackGroundColor() { |
||||
return tableContentBackGroundColor; |
||||
} |
||||
|
||||
public void setTableContentBackGroundColor(IndexedColors tableContentBackGroundColor) { |
||||
this.tableContentBackGroundColor = tableContentBackGroundColor; |
||||
} |
||||
} |
@ -1,42 +0,0 @@
|
||||
package com.alibaba.excel.metadata; |
||||
|
||||
import java.util.Date; |
||||
|
||||
import com.alibaba.excel.enums.CellDataTypeEnum; |
||||
import com.alibaba.excel.write.metadata.style.WriteCellStyle; |
||||
|
||||
import lombok.Data; |
||||
|
||||
/** |
||||
* TODO |
||||
* |
||||
* @author Jiaju Zhuang |
||||
*/ |
||||
@Data |
||||
public class WriteCellData<T> extends CellData<T> { |
||||
/** |
||||
* Support only when writing.{@link CellDataTypeEnum#DATE} |
||||
*/ |
||||
private Date dateValue; |
||||
/** |
||||
* {@link CellDataTypeEnum#IMAGE} |
||||
*/ |
||||
private ImageData imageDataValue; |
||||
/** |
||||
* rich text.{@link CellDataTypeEnum#RICH_TEXT_STRING} |
||||
*/ |
||||
private RichTextStringData richTextStringDataValue; |
||||
|
||||
/** |
||||
* comment |
||||
*/ |
||||
private CommentData commentData; |
||||
/** |
||||
* hyper link |
||||
*/ |
||||
private HyperlinkData hyperlinkData; |
||||
/** |
||||
* sytle |
||||
*/ |
||||
private WriteCellStyle writeCellStyle; |
||||
} |
@ -0,0 +1,76 @@
|
||||
package com.alibaba.excel.metadata.data; |
||||
|
||||
import java.math.BigDecimal; |
||||
|
||||
import com.alibaba.excel.enums.CellDataTypeEnum; |
||||
import com.alibaba.excel.metadata.AbstractCell; |
||||
import com.alibaba.excel.util.StringUtils; |
||||
|
||||
import lombok.Data; |
||||
|
||||
/** |
||||
* Excel internal cell data. |
||||
* |
||||
* <p> |
||||
* |
||||
* @author Jiaju Zhuang |
||||
*/ |
||||
@Data |
||||
public class CellData<T> extends AbstractCell { |
||||
/** |
||||
* cell type |
||||
*/ |
||||
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; |
||||
|
||||
/** |
||||
* The resulting converted data. |
||||
*/ |
||||
private T data; |
||||
|
||||
/** |
||||
* formula |
||||
*/ |
||||
private FormulaData formulaData; |
||||
|
||||
/** |
||||
* 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: |
||||
} |
||||
} |
||||
|
||||
|
||||
} |
@ -1,9 +1,9 @@
|
||||
package com.alibaba.excel.metadata; |
||||
package com.alibaba.excel.metadata.data; |
||||
|
||||
import lombok.Data; |
||||
|
||||
/** |
||||
* TODO |
||||
* comment |
||||
* |
||||
* @author Jiaju Zhuang |
||||
*/ |
@ -0,0 +1,28 @@
|
||||
package com.alibaba.excel.metadata.data; |
||||
|
||||
import lombok.Data; |
||||
|
||||
/** |
||||
* coordinate. |
||||
* |
||||
* @author Jiaju Zhuang |
||||
*/ |
||||
@Data |
||||
public class CoordinateData { |
||||
/** |
||||
* first row index |
||||
*/ |
||||
private Integer firstRowIndex; |
||||
/** |
||||
* first column index |
||||
*/ |
||||
private Integer firstColumnIndex; |
||||
/** |
||||
* last row index |
||||
*/ |
||||
private Integer lastRowIndex; |
||||
/** |
||||
* last column index |
||||
*/ |
||||
private Integer lastColumnIndex; |
||||
} |
@ -1,4 +1,4 @@
|
||||
package com.alibaba.excel.metadata; |
||||
package com.alibaba.excel.metadata.data; |
||||
|
||||
import lombok.Data; |
||||
|
@ -0,0 +1,53 @@
|
||||
package com.alibaba.excel.metadata.data; |
||||
|
||||
import lombok.Data; |
||||
|
||||
/** |
||||
* hyperlink |
||||
* |
||||
* @author Jiaju Zhuang |
||||
*/ |
||||
@Data |
||||
public class HyperlinkData extends CoordinateData { |
||||
/** |
||||
* Depending on the hyperlink type it can be URL, e-mail, path to a file, etc |
||||
*/ |
||||
private String address; |
||||
/** |
||||
* hyperlink type |
||||
*/ |
||||
private HyperlinkType hyperlinkType; |
||||
|
||||
public enum HyperlinkType { |
||||
/** |
||||
* Not a hyperlink |
||||
*/ |
||||
NONE(-1), |
||||
|
||||
/** |
||||
* Link to an existing file or web page |
||||
*/ |
||||
URL(1), |
||||
|
||||
/** |
||||
* Link to a place in this document |
||||
*/ |
||||
DOCUMENT(2), |
||||
|
||||
/** |
||||
* Link to an E-mail address |
||||
*/ |
||||
EMAIL(3), |
||||
|
||||
/** |
||||
* Link to a file |
||||
*/ |
||||
FILE(4); |
||||
|
||||
public final int value; |
||||
|
||||
HyperlinkType(int value) { |
||||
this.value = value; |
||||
} |
||||
} |
||||
} |
@ -1,4 +1,4 @@
|
||||
package com.alibaba.excel.metadata; |
||||
package com.alibaba.excel.metadata.data; |
||||
|
||||
import lombok.Data; |
||||
|
@ -0,0 +1,111 @@
|
||||
package com.alibaba.excel.metadata.data; |
||||
|
||||
import java.math.BigDecimal; |
||||
|
||||
import com.alibaba.excel.enums.CellDataTypeEnum; |
||||
|
||||
import lombok.Data; |
||||
|
||||
/** |
||||
* read cell data |
||||
* |
||||
* @author Jiaju Zhuang |
||||
*/ |
||||
@Data |
||||
public class ReadCellData<T> extends CellData<T> { |
||||
/** |
||||
* data format. |
||||
*/ |
||||
private DataFormatData dataFormatData; |
||||
|
||||
|
||||
public ReadCellData(CellDataTypeEnum type) { |
||||
super(); |
||||
if (type == null) { |
||||
throw new IllegalArgumentException("Type can not be null"); |
||||
} |
||||
setType(type); |
||||
} |
||||
|
||||
public ReadCellData(T data) { |
||||
super(); |
||||
setData(data); |
||||
} |
||||
|
||||
public ReadCellData(String stringValue) { |
||||
this(CellDataTypeEnum.STRING, stringValue); |
||||
} |
||||
|
||||
public ReadCellData(CellDataTypeEnum type, String stringValue) { |
||||
super(); |
||||
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"); |
||||
} |
||||
setType(type); |
||||
setStringValue(stringValue); |
||||
} |
||||
|
||||
public ReadCellData(BigDecimal numberValue) { |
||||
super(); |
||||
if (numberValue == null) { |
||||
throw new IllegalArgumentException("DoubleValue can not be null"); |
||||
} |
||||
setType(CellDataTypeEnum.NUMBER); |
||||
setNumberValue(numberValue); |
||||
} |
||||
|
||||
public ReadCellData(Boolean booleanValue) { |
||||
super(); |
||||
if (booleanValue == null) { |
||||
throw new IllegalArgumentException("BooleanValue can not be null"); |
||||
} |
||||
setType(CellDataTypeEnum.BOOLEAN); |
||||
setBooleanValue(booleanValue); |
||||
} |
||||
|
||||
public static ReadCellData<?> newEmptyInstance() { |
||||
return newEmptyInstance(null, null); |
||||
} |
||||
|
||||
public static ReadCellData<?> newEmptyInstance(Integer rowIndex, Integer columnIndex) { |
||||
ReadCellData<?> cellData = new ReadCellData<>(CellDataTypeEnum.EMPTY); |
||||
cellData.setRowIndex(rowIndex); |
||||
cellData.setColumnIndex(columnIndex); |
||||
return cellData; |
||||
} |
||||
|
||||
public static ReadCellData<?> newInstance(Boolean booleanValue) { |
||||
return newInstance(booleanValue, null, null); |
||||
} |
||||
|
||||
public static ReadCellData<?> newInstance(Boolean booleanValue, Integer rowIndex, Integer columnIndex) { |
||||
ReadCellData<?> cellData = new ReadCellData<>(booleanValue); |
||||
cellData.setRowIndex(rowIndex); |
||||
cellData.setColumnIndex(columnIndex); |
||||
return cellData; |
||||
} |
||||
|
||||
public static ReadCellData<?> newInstance(String stringValue, Integer rowIndex, Integer columnIndex) { |
||||
ReadCellData<?> cellData = new ReadCellData<>(stringValue); |
||||
cellData.setRowIndex(rowIndex); |
||||
cellData.setColumnIndex(columnIndex); |
||||
return cellData; |
||||
} |
||||
|
||||
public static ReadCellData<?> newInstance(BigDecimal numberValue, Integer rowIndex, Integer columnIndex) { |
||||
ReadCellData<?> cellData = new ReadCellData<>(numberValue); |
||||
cellData.setRowIndex(rowIndex); |
||||
cellData.setColumnIndex(columnIndex); |
||||
return cellData; |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public ReadCellData<Object> clone(){ |
||||
return new ReadCellData<>(""); |
||||
} |
||||
|
||||
} |
@ -1,4 +1,4 @@
|
||||
package com.alibaba.excel.metadata; |
||||
package com.alibaba.excel.metadata.data; |
||||
|
||||
import java.util.List; |
||||
|
@ -0,0 +1,101 @@
|
||||
package com.alibaba.excel.metadata.data; |
||||
|
||||
import java.math.BigDecimal; |
||||
import java.util.Date; |
||||
import java.util.List; |
||||
|
||||
import com.alibaba.excel.enums.CellDataTypeEnum; |
||||
import com.alibaba.excel.util.ListUtils; |
||||
import com.alibaba.excel.write.metadata.style.WriteCellStyle; |
||||
|
||||
import lombok.Data; |
||||
|
||||
/** |
||||
* wirte cell data |
||||
* |
||||
* @author Jiaju Zhuang |
||||
*/ |
||||
@Data |
||||
public class WriteCellData<T> extends CellData<T> { |
||||
/** |
||||
* Support only when writing.{@link CellDataTypeEnum#DATE} |
||||
*/ |
||||
private Date dateValue; |
||||
/** |
||||
* rich text.{@link CellDataTypeEnum#RICH_TEXT_STRING} |
||||
*/ |
||||
private RichTextStringData richTextStringDataValue; |
||||
/** |
||||
* image |
||||
*/ |
||||
private List<ImageData> imageDataList; |
||||
/** |
||||
* comment |
||||
*/ |
||||
private CommentData commentData; |
||||
/** |
||||
* hyper link |
||||
*/ |
||||
private HyperlinkData hyperlinkData; |
||||
/** |
||||
* sytle |
||||
*/ |
||||
private WriteCellStyle writeCellStyle; |
||||
|
||||
|
||||
public WriteCellData(String stringValue) { |
||||
this(CellDataTypeEnum.STRING, stringValue); |
||||
} |
||||
|
||||
public WriteCellData(CellDataTypeEnum type, String stringValue) { |
||||
super(); |
||||
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"); |
||||
} |
||||
setType(type); |
||||
setStringValue(stringValue); |
||||
} |
||||
|
||||
public WriteCellData(BigDecimal numberValue) { |
||||
super(); |
||||
if (numberValue == null) { |
||||
throw new IllegalArgumentException("DoubleValue can not be null"); |
||||
} |
||||
setType(CellDataTypeEnum.NUMBER); |
||||
setNumberValue(numberValue); |
||||
} |
||||
|
||||
public WriteCellData(Boolean booleanValue) { |
||||
super(); |
||||
if (booleanValue == null) { |
||||
throw new IllegalArgumentException("BooleanValue can not be null"); |
||||
} |
||||
setType(CellDataTypeEnum.BOOLEAN); |
||||
setBooleanValue(booleanValue); |
||||
} |
||||
|
||||
public WriteCellData(Date dateValue) { |
||||
super(); |
||||
if (dateValue == null) { |
||||
throw new IllegalArgumentException("DateValue can not be null"); |
||||
} |
||||
setType(CellDataTypeEnum.DATE); |
||||
this.dateValue = dateValue; |
||||
} |
||||
|
||||
public WriteCellData(byte[] image) { |
||||
super(); |
||||
if (image == null) { |
||||
throw new IllegalArgumentException("Image can not be null"); |
||||
} |
||||
setType(CellDataTypeEnum.EMPTY); |
||||
this.imageDataList= ListUtils.newArrayList(); |
||||
ImageData imageData = new ImageData(); |
||||
imageData.setImage(image); |
||||
imageDataList.add(imageData); |
||||
} |
||||
|
||||
} |
@ -1,58 +0,0 @@
|
||||
package com.alibaba.excel.parameter; |
||||
|
||||
import com.alibaba.excel.support.ExcelTypeEnum; |
||||
|
||||
import java.io.InputStream; |
||||
|
||||
/** |
||||
* |
||||
* @author jipengfei |
||||
*/ |
||||
@Deprecated |
||||
public class AnalysisParam { |
||||
|
||||
/** |
||||
* @see ExcelTypeEnum |
||||
*/ |
||||
private ExcelTypeEnum excelTypeEnum; |
||||
|
||||
/** |
||||
* the POI filesystem that contains the Workbook stream |
||||
*/ |
||||
private InputStream in; |
||||
|
||||
/** |
||||
* user defined param to listener use |
||||
*/ |
||||
private Object customContent; |
||||
|
||||
public AnalysisParam(InputStream in, ExcelTypeEnum excelTypeEnum, Object customContent) { |
||||
this.in = in; |
||||
this.excelTypeEnum = excelTypeEnum; |
||||
this.customContent = customContent; |
||||
} |
||||
|
||||
public ExcelTypeEnum getExcelTypeEnum() { |
||||
return excelTypeEnum; |
||||
} |
||||
|
||||
public void setExcelTypeEnum(ExcelTypeEnum excelTypeEnum) { |
||||
this.excelTypeEnum = excelTypeEnum; |
||||
} |
||||
|
||||
public Object getCustomContent() { |
||||
return customContent; |
||||
} |
||||
|
||||
public void setCustomContent(Object customContent) { |
||||
this.customContent = customContent; |
||||
} |
||||
|
||||
public InputStream getIn() { |
||||
return in; |
||||
} |
||||
|
||||
public void setIn(InputStream in) { |
||||
this.in = in; |
||||
} |
||||
} |
@ -1,71 +0,0 @@
|
||||
package com.alibaba.excel.parameter; |
||||
|
||||
import java.io.OutputStream; |
||||
|
||||
import com.alibaba.excel.support.ExcelTypeEnum; |
||||
|
||||
/** |
||||
* Created by jipengfei on 17/2/19. |
||||
* |
||||
* @author jipengfei |
||||
* @deprecated please use {@link com.alibaba.excel.write.builder.ExcelWriterBuilder} build ExcelWriter |
||||
*/ |
||||
@Deprecated |
||||
public class GenerateParam { |
||||
|
||||
private OutputStream outputStream; |
||||
|
||||
private String sheetName; |
||||
|
||||
private Class clazz; |
||||
|
||||
private ExcelTypeEnum type; |
||||
|
||||
private boolean needHead = true; |
||||
|
||||
public GenerateParam(String sheetName, Class clazz, OutputStream outputStream) { |
||||
this.outputStream = outputStream; |
||||
this.sheetName = sheetName; |
||||
this.clazz = clazz; |
||||
} |
||||
|
||||
public OutputStream getOutputStream() { |
||||
return outputStream; |
||||
} |
||||
|
||||
public void setOutputStream(OutputStream outputStream) { |
||||
this.outputStream = outputStream; |
||||
} |
||||
|
||||
public String getSheetName() { |
||||
return sheetName; |
||||
} |
||||
|
||||
public void setSheetName(String sheetName) { |
||||
this.sheetName = sheetName; |
||||
} |
||||
|
||||
public Class getClazz() { |
||||
return clazz; |
||||
} |
||||
|
||||
public void setClazz(Class clazz) { |
||||
this.clazz = clazz; |
||||
} |
||||
|
||||
public ExcelTypeEnum getType() { |
||||
return type; |
||||
} |
||||
|
||||
public void setType(ExcelTypeEnum type) { |
||||
this.type = type; |
||||
} |
||||
|
||||
public boolean isNeedHead() { |
||||
return needHead; |
||||
} |
||||
|
||||
public void setNeedHead(boolean needHead) { |
||||
this.needHead = needHead; |
||||
} |
||||
} |
@ -0,0 +1,46 @@
|
||||
package com.alibaba.excel.util; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
import com.alibaba.excel.metadata.data.ImageData.ImageType; |
||||
|
||||
/** |
||||
* file type utils |
||||
* |
||||
* @author Jiaju Zhuang |
||||
*/ |
||||
public class FileTypeUtils { |
||||
|
||||
private static final char[] DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', |
||||
'f'}; |
||||
private static final int IMAGE_TYPE_MARK_LENGTH = 28; |
||||
|
||||
private static final Map<String, ImageType> FILE_TYPE_MAP; |
||||
|
||||
static { |
||||
FILE_TYPE_MAP = new HashMap<>(); |
||||
FILE_TYPE_MAP.put("ffd8ff", ImageType.PICTURE_TYPE_JPEG); |
||||
FILE_TYPE_MAP.put("89504e47", ImageType.PICTURE_TYPE_PNG); |
||||
} |
||||
|
||||
public static ImageType getImageType(byte[] image) { |
||||
if (image == null || image.length <= IMAGE_TYPE_MARK_LENGTH) { |
||||
return null; |
||||
} |
||||
byte[] typeMarkByte = new byte[IMAGE_TYPE_MARK_LENGTH]; |
||||
System.arraycopy(image, 0, typeMarkByte, 0, IMAGE_TYPE_MARK_LENGTH); |
||||
return FILE_TYPE_MAP.get(encodeHexStr(typeMarkByte)); |
||||
} |
||||
|
||||
private static String encodeHexStr(byte[] data) { |
||||
final int len = data.length; |
||||
final char[] out = new char[len << 1]; |
||||
// two characters from the hex value.
|
||||
for (int i = 0, j = 0; i < len; i++) { |
||||
out[j++] = DIGITS[(0xF0 & data[i]) >>> 4]; |
||||
out[j++] = DIGITS[0x0F & data[i]]; |
||||
} |
||||
return new String(out); |
||||
} |
||||
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue