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