mirror of https://github.com/alibaba/easyexcel
Jiaju Zhuang
3 years ago
committed by
GitHub
279 changed files with 8526 additions and 5409 deletions
@ -0,0 +1,2 @@ |
|||||||
|
lombok.toString.callSuper = CALL |
||||||
|
lombok.equalsAndHashCode.callSuper= CALL |
@ -0,0 +1,122 @@ |
|||||||
|
package com.alibaba.excel.analysis.csv; |
||||||
|
|
||||||
|
import java.io.FileReader; |
||||||
|
import java.io.IOException; |
||||||
|
import java.io.InputStreamReader; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Iterator; |
||||||
|
import java.util.LinkedHashMap; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import com.alibaba.excel.analysis.ExcelReadExecutor; |
||||||
|
import com.alibaba.excel.context.csv.CsvReadContext; |
||||||
|
import com.alibaba.excel.enums.CellDataTypeEnum; |
||||||
|
import com.alibaba.excel.enums.RowTypeEnum; |
||||||
|
import com.alibaba.excel.exception.ExcelAnalysisException; |
||||||
|
import com.alibaba.excel.metadata.Cell; |
||||||
|
import com.alibaba.excel.metadata.data.ReadCellData; |
||||||
|
import com.alibaba.excel.read.metadata.ReadSheet; |
||||||
|
import com.alibaba.excel.read.metadata.holder.ReadRowHolder; |
||||||
|
import com.alibaba.excel.read.metadata.holder.csv.CsvReadWorkbookHolder; |
||||||
|
import com.alibaba.excel.util.SheetUtils; |
||||||
|
import com.alibaba.excel.util.StringUtils; |
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.apache.commons.collections4.MapUtils; |
||||||
|
import org.apache.commons.csv.CSVFormat; |
||||||
|
import org.apache.commons.csv.CSVRecord; |
||||||
|
|
||||||
|
/** |
||||||
|
* read executor |
||||||
|
* |
||||||
|
* @author zhuangjiaju |
||||||
|
*/ |
||||||
|
@Slf4j |
||||||
|
public class CsvExcelReadExecutor implements ExcelReadExecutor { |
||||||
|
|
||||||
|
private List<ReadSheet> sheetList; |
||||||
|
private CsvReadContext csvReadContext; |
||||||
|
|
||||||
|
public CsvExcelReadExecutor(CsvReadContext csvReadContext) { |
||||||
|
this.csvReadContext = csvReadContext; |
||||||
|
sheetList = new ArrayList<>(); |
||||||
|
ReadSheet readSheet = new ReadSheet(); |
||||||
|
sheetList.add(readSheet); |
||||||
|
readSheet.setSheetNo(0); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public List<ReadSheet> sheetList() { |
||||||
|
return sheetList; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void execute() { |
||||||
|
Iterable<CSVRecord> parseRecords; |
||||||
|
try { |
||||||
|
parseRecords = parseRecords(); |
||||||
|
} catch (IOException e) { |
||||||
|
throw new ExcelAnalysisException(e); |
||||||
|
} |
||||||
|
for (ReadSheet readSheet : sheetList) { |
||||||
|
readSheet = SheetUtils.match(readSheet, csvReadContext); |
||||||
|
if (readSheet == null) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
csvReadContext.currentSheet(readSheet); |
||||||
|
|
||||||
|
int rowIndex = 0; |
||||||
|
|
||||||
|
for (CSVRecord record : parseRecords) { |
||||||
|
dealRecord(record, rowIndex++); |
||||||
|
} |
||||||
|
|
||||||
|
// The last sheet is read
|
||||||
|
csvReadContext.analysisEventProcessor().endSheet(csvReadContext); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private Iterable<CSVRecord> parseRecords() throws IOException { |
||||||
|
CsvReadWorkbookHolder csvReadWorkbookHolder = csvReadContext.csvReadWorkbookHolder(); |
||||||
|
CSVFormat csvFormat = csvReadWorkbookHolder.getCsvFormat(); |
||||||
|
|
||||||
|
if (csvReadWorkbookHolder.getMandatoryUseInputStream()) { |
||||||
|
return csvFormat.parse(new InputStreamReader(csvReadWorkbookHolder.getInputStream())); |
||||||
|
} |
||||||
|
if (csvReadWorkbookHolder.getFile() != null) { |
||||||
|
return csvFormat.parse(new FileReader(csvReadWorkbookHolder.getFile())); |
||||||
|
} |
||||||
|
return csvFormat.parse(new InputStreamReader(csvReadWorkbookHolder.getInputStream())); |
||||||
|
} |
||||||
|
|
||||||
|
private void dealRecord(CSVRecord record, int rowIndex) { |
||||||
|
Map<Integer, Cell> cellMap = new LinkedHashMap<>(); |
||||||
|
Iterator<String> cellIterator = record.iterator(); |
||||||
|
int columnIndex = 0; |
||||||
|
while (cellIterator.hasNext()) { |
||||||
|
String cellString = cellIterator.next(); |
||||||
|
ReadCellData<String> readCellData = new ReadCellData<>(); |
||||||
|
readCellData.setRowIndex(rowIndex); |
||||||
|
readCellData.setColumnIndex(columnIndex); |
||||||
|
|
||||||
|
// csv is an empty string of whether <code>,,</code> is read or <code>,"",</code>
|
||||||
|
if (StringUtils.isNotBlank(cellString)) { |
||||||
|
readCellData.setType(CellDataTypeEnum.STRING); |
||||||
|
readCellData.setStringValue(cellString); |
||||||
|
} else { |
||||||
|
readCellData.setType(CellDataTypeEnum.EMPTY); |
||||||
|
} |
||||||
|
cellMap.put(columnIndex++, readCellData); |
||||||
|
} |
||||||
|
|
||||||
|
RowTypeEnum rowType = MapUtils.isEmpty(cellMap) ? RowTypeEnum.EMPTY : RowTypeEnum.DATA; |
||||||
|
ReadRowHolder readRowHolder = new ReadRowHolder(rowIndex, rowType, |
||||||
|
csvReadContext.readWorkbookHolder().getGlobalConfiguration(), cellMap); |
||||||
|
csvReadContext.readRowHolder(readRowHolder); |
||||||
|
|
||||||
|
csvReadContext.csvReadSheetHolder().setCellMap(cellMap); |
||||||
|
csvReadContext.csvReadSheetHolder().setRowIndex(rowIndex); |
||||||
|
csvReadContext.analysisEventProcessor().endRow(csvReadContext); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,24 @@ |
|||||||
|
package com.alibaba.excel.constant; |
||||||
|
|
||||||
|
/** |
||||||
|
* Order constant. |
||||||
|
* |
||||||
|
* @author Jiaju Zhuang |
||||||
|
*/ |
||||||
|
public class OrderConstant { |
||||||
|
|
||||||
|
/** |
||||||
|
* Define style. |
||||||
|
*/ |
||||||
|
public static final int DEFINE_STYLE = -50000; |
||||||
|
|
||||||
|
/** |
||||||
|
* default order. |
||||||
|
*/ |
||||||
|
public static final int DEFAULT_ORDER = 0; |
||||||
|
|
||||||
|
/** |
||||||
|
* Sorting of styles written to cells. |
||||||
|
*/ |
||||||
|
public static final int FILL_STYLE = 50000; |
||||||
|
} |
@ -0,0 +1,26 @@ |
|||||||
|
package com.alibaba.excel.context.csv; |
||||||
|
|
||||||
|
import com.alibaba.excel.context.AnalysisContext; |
||||||
|
import com.alibaba.excel.read.metadata.holder.csv.CsvReadSheetHolder; |
||||||
|
import com.alibaba.excel.read.metadata.holder.csv.CsvReadWorkbookHolder; |
||||||
|
|
||||||
|
/** |
||||||
|
* A context is the main anchorage point of a ls xls reader. |
||||||
|
* |
||||||
|
* @author Jiaju Zhuang |
||||||
|
**/ |
||||||
|
public interface CsvReadContext extends AnalysisContext { |
||||||
|
/** |
||||||
|
* All information about the workbook you are currently working on. |
||||||
|
* |
||||||
|
* @return Current workbook holder |
||||||
|
*/ |
||||||
|
CsvReadWorkbookHolder csvReadWorkbookHolder(); |
||||||
|
|
||||||
|
/** |
||||||
|
* All information about the sheet you are currently working on. |
||||||
|
* |
||||||
|
* @return Current sheet holder |
||||||
|
*/ |
||||||
|
CsvReadSheetHolder csvReadSheetHolder(); |
||||||
|
} |
@ -0,0 +1,29 @@ |
|||||||
|
package com.alibaba.excel.context.csv; |
||||||
|
|
||||||
|
import com.alibaba.excel.context.AnalysisContextImpl; |
||||||
|
import com.alibaba.excel.read.metadata.ReadWorkbook; |
||||||
|
import com.alibaba.excel.read.metadata.holder.csv.CsvReadSheetHolder; |
||||||
|
import com.alibaba.excel.read.metadata.holder.csv.CsvReadWorkbookHolder; |
||||||
|
import com.alibaba.excel.support.ExcelTypeEnum; |
||||||
|
|
||||||
|
/** |
||||||
|
* A context is the main anchorage point of a ls xls reader. |
||||||
|
* |
||||||
|
* @author Jiaju Zhuang |
||||||
|
*/ |
||||||
|
public class DefaultCsvReadContext extends AnalysisContextImpl implements CsvReadContext { |
||||||
|
|
||||||
|
public DefaultCsvReadContext(ReadWorkbook readWorkbook, ExcelTypeEnum actualExcelType) { |
||||||
|
super(readWorkbook, actualExcelType); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public CsvReadWorkbookHolder csvReadWorkbookHolder() { |
||||||
|
return (CsvReadWorkbookHolder)readWorkbookHolder(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public CsvReadSheetHolder csvReadSheetHolder() { |
||||||
|
return (CsvReadSheetHolder)readSheetHolder(); |
||||||
|
} |
||||||
|
} |
@ -1,36 +1,9 @@ |
|||||||
package com.alibaba.excel.converters; |
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. |
* An empty converter.It's automatically converted by type. |
||||||
* |
* |
||||||
* @author Jiaju Zhuang |
* @author Jiaju Zhuang |
||||||
*/ |
*/ |
||||||
public class AutoConverter implements Converter { |
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,10 @@ |
|||||||
|
package com.alibaba.excel.converters; |
||||||
|
|
||||||
|
/** |
||||||
|
* When implementing <code>convertToExcelData</code> method, pay attention to the reference <code>value</code> may be |
||||||
|
* null |
||||||
|
* |
||||||
|
* @author JiaJu Zhuang |
||||||
|
**/ |
||||||
|
public interface NullableObjectConverter<T> extends Converter<T> { |
||||||
|
} |
@ -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,32 @@ |
|||||||
|
package com.alibaba.excel.converters; |
||||||
|
|
||||||
|
import com.alibaba.excel.context.WriteContext; |
||||||
|
import com.alibaba.excel.metadata.property.ExcelContentProperty; |
||||||
|
|
||||||
|
import lombok.AllArgsConstructor; |
||||||
|
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; |
||||||
|
} |
@ -0,0 +1,34 @@ |
|||||||
|
package com.alibaba.excel.converters.date; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
import com.alibaba.excel.converters.Converter; |
||||||
|
import com.alibaba.excel.metadata.GlobalConfiguration; |
||||||
|
import com.alibaba.excel.metadata.data.WriteCellData; |
||||||
|
import com.alibaba.excel.metadata.property.ExcelContentProperty; |
||||||
|
import com.alibaba.excel.util.DateUtils; |
||||||
|
import com.alibaba.excel.util.WorkBookUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* Date and date converter |
||||||
|
* |
||||||
|
* @author Jiaju Zhuang |
||||||
|
*/ |
||||||
|
public class DateDateConverter implements Converter<Date> { |
||||||
|
@Override |
||||||
|
public Class<Date> supportJavaTypeKey() { |
||||||
|
return Date.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public WriteCellData<?> convertToExcelData(Date value, ExcelContentProperty contentProperty, |
||||||
|
GlobalConfiguration globalConfiguration) throws Exception { |
||||||
|
WriteCellData<?> cellData = new WriteCellData<>(value); |
||||||
|
String format = null; |
||||||
|
if (contentProperty != null && contentProperty.getDateTimeFormatProperty() != null) { |
||||||
|
format = contentProperty.getDateTimeFormatProperty().getFormat(); |
||||||
|
} |
||||||
|
WorkBookUtil.fillDataFormat(cellData, format, DateUtils.defaultDateFormat); |
||||||
|
return cellData; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
package com.alibaba.excel.enums; |
||||||
|
|
||||||
|
import org.apache.poi.ss.usermodel.CellType; |
||||||
|
|
||||||
|
/** |
||||||
|
* Used to supplement {@link CellType}. |
||||||
|
* |
||||||
|
* Cannot distinguish between date and number in write case. |
||||||
|
* |
||||||
|
* @author Jiaju Zhuang |
||||||
|
*/ |
||||||
|
public enum NumericCellTypeEnum { |
||||||
|
/** |
||||||
|
* number |
||||||
|
*/ |
||||||
|
NUMBER, |
||||||
|
/** |
||||||
|
* date. Support only when writing. |
||||||
|
*/ |
||||||
|
DATE, |
||||||
|
; |
||||||
|
} |
@ -1,8 +1,21 @@ |
|||||||
package com.alibaba.excel.event; |
package com.alibaba.excel.event; |
||||||
|
|
||||||
|
import com.alibaba.excel.constant.OrderConstant; |
||||||
|
|
||||||
/** |
/** |
||||||
* Intercepts handle some business logic |
* Intercepts handle some business logic |
||||||
* |
* |
||||||
* @author Jiaju Zhuang |
* @author Jiaju Zhuang |
||||||
**/ |
**/ |
||||||
public interface Handler {} |
public interface Handler extends Order { |
||||||
|
|
||||||
|
/** |
||||||
|
* handler order |
||||||
|
* |
||||||
|
* @return order |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
default int order() { |
||||||
|
return OrderConstant.DEFAULT_ORDER; |
||||||
|
} |
||||||
|
} |
||||||
|
@ -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,286 +0,0 @@ |
|||||||
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; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
@ -0,0 +1,9 @@ |
|||||||
|
package com.alibaba.excel.metadata; |
||||||
|
|
||||||
|
/** |
||||||
|
* Null object. |
||||||
|
* |
||||||
|
* @author Jiaju Zhuang |
||||||
|
*/ |
||||||
|
public class NullObject { |
||||||
|
} |
@ -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; |
|
||||||
} |
|
||||||
} |
|
@ -0,0 +1,354 @@ |
|||||||
|
package com.alibaba.excel.metadata.csv; |
||||||
|
|
||||||
|
import java.math.BigDecimal; |
||||||
|
import java.time.LocalDateTime; |
||||||
|
import java.time.ZoneId; |
||||||
|
import java.util.Calendar; |
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
import com.alibaba.excel.enums.NumericCellTypeEnum; |
||||||
|
import com.alibaba.excel.metadata.data.FormulaData; |
||||||
|
|
||||||
|
import lombok.AccessLevel; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.Getter; |
||||||
|
import lombok.Setter; |
||||||
|
import org.apache.poi.ss.SpreadsheetVersion; |
||||||
|
import org.apache.poi.ss.usermodel.CellBase; |
||||||
|
import org.apache.poi.ss.usermodel.CellStyle; |
||||||
|
import org.apache.poi.ss.usermodel.CellType; |
||||||
|
import org.apache.poi.ss.usermodel.Comment; |
||||||
|
import org.apache.poi.ss.usermodel.Hyperlink; |
||||||
|
import org.apache.poi.ss.usermodel.RichTextString; |
||||||
|
import org.apache.poi.ss.usermodel.Row; |
||||||
|
import org.apache.poi.ss.usermodel.Sheet; |
||||||
|
import org.apache.poi.ss.util.CellRangeAddress; |
||||||
|
|
||||||
|
/** |
||||||
|
* csv cell |
||||||
|
* |
||||||
|
* @author Jiaju Zhuang |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class CsvCell extends CellBase { |
||||||
|
|
||||||
|
/** |
||||||
|
* column index |
||||||
|
*/ |
||||||
|
@Getter(value = AccessLevel.NONE) |
||||||
|
@Setter(value = AccessLevel.NONE) |
||||||
|
private Integer columnIndex; |
||||||
|
|
||||||
|
/** |
||||||
|
* cell type |
||||||
|
*/ |
||||||
|
@Getter(value = AccessLevel.NONE) |
||||||
|
@Setter(value = AccessLevel.NONE) |
||||||
|
private CellType cellType; |
||||||
|
|
||||||
|
/** |
||||||
|
* numeric cell type |
||||||
|
*/ |
||||||
|
private NumericCellTypeEnum numericCellType; |
||||||
|
|
||||||
|
/** |
||||||
|
* workbook |
||||||
|
*/ |
||||||
|
private final CsvWorkbook csvWorkbook; |
||||||
|
|
||||||
|
/** |
||||||
|
* sheet |
||||||
|
*/ |
||||||
|
private final CsvSheet csvSheet; |
||||||
|
|
||||||
|
/** |
||||||
|
* row |
||||||
|
*/ |
||||||
|
private final CsvRow csvRow; |
||||||
|
|
||||||
|
/** |
||||||
|
* {@link CellType#NUMERIC} |
||||||
|
*/ |
||||||
|
private BigDecimal numberValue; |
||||||
|
/** |
||||||
|
* {@link CellType#STRING} and {@link CellType#ERROR} {@link CellType#FORMULA} |
||||||
|
*/ |
||||||
|
private String stringValue; |
||||||
|
/** |
||||||
|
* {@link CellType#BOOLEAN} |
||||||
|
*/ |
||||||
|
private Boolean booleanValue; |
||||||
|
|
||||||
|
/** |
||||||
|
* {@link CellType#NUMERIC} |
||||||
|
*/ |
||||||
|
private LocalDateTime dateValue; |
||||||
|
|
||||||
|
/** |
||||||
|
* formula |
||||||
|
*/ |
||||||
|
private FormulaData formulaData; |
||||||
|
|
||||||
|
/** |
||||||
|
* rich text string |
||||||
|
*/ |
||||||
|
private RichTextString richTextString; |
||||||
|
|
||||||
|
/** |
||||||
|
* style |
||||||
|
*/ |
||||||
|
private CellStyle cellStyle; |
||||||
|
|
||||||
|
public CsvCell(CsvWorkbook csvWorkbook, CsvSheet csvSheet, CsvRow csvRow, Integer columnIndex, CellType cellType) { |
||||||
|
this.csvWorkbook = csvWorkbook; |
||||||
|
this.csvSheet = csvSheet; |
||||||
|
this.csvRow = csvRow; |
||||||
|
this.columnIndex = columnIndex; |
||||||
|
this.cellType = cellType; |
||||||
|
if (this.cellType == null) { |
||||||
|
this.cellType = CellType._NONE; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void setCellTypeImpl(CellType cellType) { |
||||||
|
this.cellType = cellType; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void setCellFormulaImpl(String formula) { |
||||||
|
FormulaData formulaData = new FormulaData(); |
||||||
|
formulaData.setFormulaValue(formula); |
||||||
|
this.formulaData = formulaData; |
||||||
|
this.cellType = CellType.FORMULA; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void removeFormulaImpl() { |
||||||
|
this.formulaData = null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void setCellValueImpl(double value) { |
||||||
|
numberValue = BigDecimal.valueOf(value); |
||||||
|
this.cellType = CellType.NUMERIC; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void setCellValueImpl(Date value) { |
||||||
|
if (value == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
this.dateValue = LocalDateTime.ofInstant(value.toInstant(), ZoneId.systemDefault()); |
||||||
|
this.cellType = CellType.NUMERIC; |
||||||
|
this.numericCellType = NumericCellTypeEnum.DATE; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void setCellValueImpl(LocalDateTime value) { |
||||||
|
this.dateValue = value; |
||||||
|
this.cellType = CellType.NUMERIC; |
||||||
|
this.numericCellType = NumericCellTypeEnum.DATE; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void setCellValueImpl(Calendar value) { |
||||||
|
if (value == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
this.dateValue = LocalDateTime.ofInstant(value.toInstant(), ZoneId.systemDefault()); |
||||||
|
this.cellType = CellType.NUMERIC; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void setCellValueImpl(String value) { |
||||||
|
this.stringValue = value; |
||||||
|
this.cellType = CellType.STRING; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void setCellValueImpl(RichTextString value) { |
||||||
|
richTextString = value; |
||||||
|
this.cellType = CellType.STRING; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setCellValue(String value) { |
||||||
|
if (value == null) { |
||||||
|
setBlank(); |
||||||
|
return; |
||||||
|
} |
||||||
|
setCellValueImpl(value); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setCellValue(RichTextString value) { |
||||||
|
if (value == null || value.getString() == null) { |
||||||
|
setBlank(); |
||||||
|
return; |
||||||
|
} |
||||||
|
setCellValueImpl(value); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected SpreadsheetVersion getSpreadsheetVersion() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getColumnIndex() { |
||||||
|
return columnIndex; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getRowIndex() { |
||||||
|
return csvRow.getRowNum(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Sheet getSheet() { |
||||||
|
return csvRow.getSheet(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Row getRow() { |
||||||
|
return csvRow; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public CellType getCellType() { |
||||||
|
return cellType; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public CellType getCachedFormulaResultType() { |
||||||
|
return getCellType(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public CellType getCachedFormulaResultTypeEnum() { |
||||||
|
return getCellType(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getCellFormula() { |
||||||
|
if (formulaData == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
return formulaData.getFormulaValue(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public double getNumericCellValue() { |
||||||
|
if (numberValue == null) { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
return numberValue.doubleValue(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Date getDateCellValue() { |
||||||
|
if (dateValue == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
return Date.from(dateValue.atZone(ZoneId.systemDefault()).toInstant()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public LocalDateTime getLocalDateTimeCellValue() { |
||||||
|
return dateValue; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public RichTextString getRichStringCellValue() { |
||||||
|
return richTextString; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getStringCellValue() { |
||||||
|
return stringValue; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setCellValue(boolean value) { |
||||||
|
this.booleanValue = value; |
||||||
|
this.cellType = CellType.BOOLEAN; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setCellErrorValue(byte value) { |
||||||
|
this.numberValue = BigDecimal.valueOf(value); |
||||||
|
this.cellType = CellType.ERROR; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean getBooleanCellValue() { |
||||||
|
if (booleanValue == null) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
return booleanValue; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public byte getErrorCellValue() { |
||||||
|
if (numberValue == null) { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
return numberValue.byteValue(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setCellStyle(CellStyle style) { |
||||||
|
this.cellStyle = style; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public CellStyle getCellStyle() { |
||||||
|
return cellStyle; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setAsActiveCell() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setCellComment(Comment comment) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Comment getCellComment() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void removeCellComment() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Hyperlink getHyperlink() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setHyperlink(Hyperlink link) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void removeHyperlink() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public CellRangeAddress getArrayFormulaRange() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPartOfArrayFormulaGroup() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,333 @@ |
|||||||
|
package com.alibaba.excel.metadata.csv; |
||||||
|
|
||||||
|
import com.alibaba.excel.metadata.data.DataFormatData; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
import org.apache.poi.ss.usermodel.BorderStyle; |
||||||
|
import org.apache.poi.ss.usermodel.CellStyle; |
||||||
|
import org.apache.poi.ss.usermodel.Color; |
||||||
|
import org.apache.poi.ss.usermodel.FillPatternType; |
||||||
|
import org.apache.poi.ss.usermodel.Font; |
||||||
|
import org.apache.poi.ss.usermodel.HorizontalAlignment; |
||||||
|
import org.apache.poi.ss.usermodel.VerticalAlignment; |
||||||
|
|
||||||
|
/** |
||||||
|
* csv cell style |
||||||
|
* |
||||||
|
* @author Jiaju Zhuang |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class CsvCellStyle implements CellStyle { |
||||||
|
|
||||||
|
/** |
||||||
|
* data format |
||||||
|
*/ |
||||||
|
private DataFormatData dataFormatData; |
||||||
|
|
||||||
|
/** |
||||||
|
* index |
||||||
|
*/ |
||||||
|
private Short index; |
||||||
|
|
||||||
|
public CsvCellStyle(Short index) { |
||||||
|
this.index = index; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public short getIndex() { |
||||||
|
return index; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setDataFormat(short fmt) { |
||||||
|
initDataFormatData(); |
||||||
|
dataFormatData.setIndex(fmt); |
||||||
|
} |
||||||
|
|
||||||
|
private void initDataFormatData() { |
||||||
|
if (dataFormatData == null) { |
||||||
|
dataFormatData = new DataFormatData(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public short getDataFormat() { |
||||||
|
if (dataFormatData == null) { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
return dataFormatData.getIndex(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getDataFormatString() { |
||||||
|
if (dataFormatData == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
return dataFormatData.getFormat(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setFont(Font font) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public short getFontIndex() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getFontIndexAsInt() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setHidden(boolean hidden) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean getHidden() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setLocked(boolean locked) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean getLocked() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setQuotePrefixed(boolean quotePrefix) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean getQuotePrefixed() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setAlignment(HorizontalAlignment align) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public HorizontalAlignment getAlignment() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public HorizontalAlignment getAlignmentEnum() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setWrapText(boolean wrapped) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean getWrapText() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setVerticalAlignment(VerticalAlignment align) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public VerticalAlignment getVerticalAlignment() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public VerticalAlignment getVerticalAlignmentEnum() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setRotation(short rotation) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public short getRotation() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setIndention(short indent) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public short getIndention() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setBorderLeft(BorderStyle border) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public BorderStyle getBorderLeft() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public BorderStyle getBorderLeftEnum() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setBorderRight(BorderStyle border) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public BorderStyle getBorderRight() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public BorderStyle getBorderRightEnum() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setBorderTop(BorderStyle border) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public BorderStyle getBorderTop() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public BorderStyle getBorderTopEnum() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setBorderBottom(BorderStyle border) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public BorderStyle getBorderBottom() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public BorderStyle getBorderBottomEnum() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setLeftBorderColor(short color) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public short getLeftBorderColor() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setRightBorderColor(short color) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public short getRightBorderColor() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setTopBorderColor(short color) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public short getTopBorderColor() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setBottomBorderColor(short color) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public short getBottomBorderColor() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setFillPattern(FillPatternType fp) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public FillPatternType getFillPattern() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public FillPatternType getFillPatternEnum() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setFillBackgroundColor(short bg) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public short getFillBackgroundColor() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Color getFillBackgroundColorColor() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setFillForegroundColor(short bg) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public short getFillForegroundColor() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Color getFillForegroundColorColor() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void cloneStyleFrom(CellStyle source) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setShrinkToFit(boolean shrinkToFit) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean getShrinkToFit() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue