mirror of https://github.com/alibaba/easyexcel
Jiaju Zhuang
3 years ago
13 changed files with 718 additions and 336 deletions
@ -1,231 +0,0 @@ |
|||||||
package com.alibaba.excel.csv; |
|
||||||
|
|
||||||
import java.time.LocalDateTime; |
|
||||||
import java.util.Calendar; |
|
||||||
import java.util.Date; |
|
||||||
|
|
||||||
import org.apache.poi.ss.formula.FormulaParseException; |
|
||||||
import org.apache.poi.ss.usermodel.Cell; |
|
||||||
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.CellAddress; |
|
||||||
import org.apache.poi.ss.util.CellRangeAddress; |
|
||||||
|
|
||||||
/** |
|
||||||
* TODO |
|
||||||
* |
|
||||||
* @author Jiaju Zhuang |
|
||||||
*/ |
|
||||||
public class CsvCell implements Cell { |
|
||||||
|
|
||||||
private String value; |
|
||||||
|
|
||||||
@Override |
|
||||||
public int getColumnIndex() { |
|
||||||
return 0; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public int getRowIndex() { |
|
||||||
return 0; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public Sheet getSheet() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public Row getRow() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setCellType(CellType cellType) { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setBlank() { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public CellType getCellType() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public CellType getCellTypeEnum() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public CellType getCachedFormulaResultType() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public CellType getCachedFormulaResultTypeEnum() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setCellValue(double value) { |
|
||||||
this.value = value + ""; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setCellValue(Date value) { |
|
||||||
this.value = value.toString(); |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setCellValue(LocalDateTime value) { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setCellValue(Calendar value) { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setCellValue(RichTextString value) { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setCellValue(String value) { |
|
||||||
this.value = value; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setCellFormula(String formula) throws FormulaParseException, IllegalStateException { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void removeFormula() throws IllegalStateException { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public String getCellFormula() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public double getNumericCellValue() { |
|
||||||
return 0; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public Date getDateCellValue() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public LocalDateTime getLocalDateTimeCellValue() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public RichTextString getRichStringCellValue() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public String getStringCellValue() { |
|
||||||
return value; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setCellValue(boolean value) { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setCellErrorValue(byte value) { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public boolean getBooleanCellValue() { |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public byte getErrorCellValue() { |
|
||||||
return 0; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setCellStyle(CellStyle style) { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public CellStyle getCellStyle() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setAsActiveCell() { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public CellAddress getAddress() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
@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; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} |
|
@ -1,15 +0,0 @@ |
|||||||
package com.alibaba.excel.csv; |
|
||||||
|
|
||||||
import org.apache.poi.ss.usermodel.DataFormat; |
|
||||||
|
|
||||||
public class CsvDataFormat implements DataFormat { |
|
||||||
@Override |
|
||||||
public short getFormat(String format) { |
|
||||||
return 0; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public String getFormat(short index) { |
|
||||||
return null; |
|
||||||
} |
|
||||||
} |
|
@ -0,0 +1,291 @@ |
|||||||
|
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.metadata.data.FormulaData; |
||||||
|
|
||||||
|
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 |
||||||
|
*/ |
||||||
|
public class CsvCell extends CellBase { |
||||||
|
|
||||||
|
/** |
||||||
|
* column index |
||||||
|
*/ |
||||||
|
private Integer columnIndex; |
||||||
|
|
||||||
|
/** |
||||||
|
* cell type |
||||||
|
*/ |
||||||
|
private CellType cellType; |
||||||
|
/** |
||||||
|
* 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(CsvRow csvRow, Integer columnIndex, CellType cellType) { |
||||||
|
this.csvRow = csvRow; |
||||||
|
this.columnIndex = columnIndex; |
||||||
|
this.cellType = cellType; |
||||||
|
} |
||||||
|
|
||||||
|
@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; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void removeFormulaImpl() { |
||||||
|
this.formulaData = null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void setCellValueImpl(double value) { |
||||||
|
numberValue = BigDecimal.valueOf(value); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void setCellValueImpl(Date value) { |
||||||
|
if (value == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
this.dateValue = LocalDateTime.ofInstant(value.toInstant(), ZoneId.systemDefault()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void setCellValueImpl(LocalDateTime value) { |
||||||
|
this.dateValue = value; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void setCellValueImpl(Calendar value) { |
||||||
|
if (value == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
this.dateValue = LocalDateTime.ofInstant(value.toInstant(), ZoneId.systemDefault()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void setCellValueImpl(String value) { |
||||||
|
this.stringValue = value; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void setCellValueImpl(RichTextString value) { |
||||||
|
richTextString = 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; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setCellErrorValue(byte value) { |
||||||
|
this.numberValue = BigDecimal.valueOf(value); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean getBooleanCellValue() { |
||||||
|
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,65 @@ |
|||||||
|
package com.alibaba.excel.metadata.csv; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
import java.util.Locale; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import com.alibaba.excel.constant.BuiltinFormats; |
||||||
|
import com.alibaba.excel.util.ListUtils; |
||||||
|
import com.alibaba.excel.util.MapUtils; |
||||||
|
|
||||||
|
import org.apache.poi.ss.usermodel.DataFormat; |
||||||
|
|
||||||
|
/** |
||||||
|
* format data |
||||||
|
* |
||||||
|
* @author Jiaju Zhuang |
||||||
|
*/ |
||||||
|
public class CsvDataFormat implements DataFormat { |
||||||
|
/** |
||||||
|
* It is stored in both map and list for easy retrieval |
||||||
|
*/ |
||||||
|
private final Map<String, Short> formatMap; |
||||||
|
private final List<String> formatList; |
||||||
|
|
||||||
|
/** |
||||||
|
* Excel's built-in format conversion. |
||||||
|
*/ |
||||||
|
private final Map<String, Short> builtinFormatsMap; |
||||||
|
private final String[] builtinFormats; |
||||||
|
|
||||||
|
public CsvDataFormat(Locale locale) { |
||||||
|
formatMap = MapUtils.newHashMap(); |
||||||
|
formatList = ListUtils.newArrayList(); |
||||||
|
builtinFormatsMap = BuiltinFormats.switchBuiltinFormatsMap(locale); |
||||||
|
builtinFormats = BuiltinFormats.switchBuiltinFormats(locale); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public short getFormat(String format) { |
||||||
|
Short index = builtinFormatsMap.get(format); |
||||||
|
if (index != null) { |
||||||
|
return index; |
||||||
|
} |
||||||
|
index = formatMap.get(format); |
||||||
|
if (index != null) { |
||||||
|
return index; |
||||||
|
} |
||||||
|
formatList.add(format); |
||||||
|
index = (short)formatList.size(); |
||||||
|
formatMap.put(format, index); |
||||||
|
return index; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getFormat(short index) { |
||||||
|
if (index < BuiltinFormats.MIN_CUSTOM_DATA_FORMAT_INDEX) { |
||||||
|
return builtinFormats[index]; |
||||||
|
} |
||||||
|
int actualIndex = index - BuiltinFormats.MIN_CUSTOM_DATA_FORMAT_INDEX; |
||||||
|
if (actualIndex >= 0 && actualIndex < formatList.size()) { |
||||||
|
return formatList.get(actualIndex); |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,68 @@ |
|||||||
|
package com.alibaba.excel.metadata.csv; |
||||||
|
|
||||||
|
import org.apache.poi.ss.usermodel.Font; |
||||||
|
import org.apache.poi.ss.usermodel.RichTextString; |
||||||
|
|
||||||
|
/** |
||||||
|
* rich text string |
||||||
|
* |
||||||
|
* @author Jiaju Zhuang |
||||||
|
*/ |
||||||
|
public class CsvRichTextString implements RichTextString { |
||||||
|
/** |
||||||
|
* string |
||||||
|
*/ |
||||||
|
private final String string; |
||||||
|
|
||||||
|
public CsvRichTextString(String string) { |
||||||
|
this.string = string; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void applyFont(int startIndex, int endIndex, short fontIndex) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void applyFont(int startIndex, int endIndex, Font font) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void applyFont(Font font) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void clearFormatting() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getString() { |
||||||
|
return string; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int length() { |
||||||
|
if (string == null) { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
return string.length(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int numFormattingRuns() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getIndexOfFormattingRun(int index) { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void applyFont(short fontIndex) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue