mirror of https://github.com/alibaba/easyexcel
Jiaju Zhuang
5 years ago
34 changed files with 1315 additions and 224 deletions
@ -0,0 +1,180 @@ |
|||||||
|
package com.alibaba.excel.metadata.property; |
||||||
|
|
||||||
|
import org.apache.poi.common.usermodel.fonts.FontCharset; |
||||||
|
import org.apache.poi.hssf.usermodel.HSSFPalette; |
||||||
|
import org.apache.poi.ss.usermodel.Font; |
||||||
|
import org.apache.poi.ss.usermodel.IndexedColors; |
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.write.style.ContentFontStyle; |
||||||
|
import com.alibaba.excel.annotation.write.style.HeadFontStyle; |
||||||
|
|
||||||
|
/** |
||||||
|
* Configuration from annotations |
||||||
|
* |
||||||
|
* @author Jiaju Zhuang |
||||||
|
*/ |
||||||
|
public class FontProperty { |
||||||
|
/** |
||||||
|
* The name for the font (i.e. Arial) |
||||||
|
*/ |
||||||
|
private String fontName; |
||||||
|
/** |
||||||
|
* Height in the familiar unit of measure - points |
||||||
|
*/ |
||||||
|
private Short fontHeightInPoints; |
||||||
|
/** |
||||||
|
* Whether to use italics or not |
||||||
|
*/ |
||||||
|
private Boolean italic; |
||||||
|
/** |
||||||
|
* Whether to use a strikeout horizontal line through the text or not |
||||||
|
*/ |
||||||
|
private Boolean strikeout; |
||||||
|
/** |
||||||
|
* The color for the font |
||||||
|
* |
||||||
|
* @see Font#COLOR_NORMAL |
||||||
|
* @see Font#COLOR_RED |
||||||
|
* @see HSSFPalette#getColor(short) |
||||||
|
* @see IndexedColors |
||||||
|
*/ |
||||||
|
private Short color; |
||||||
|
/** |
||||||
|
* Set normal,super or subscript. |
||||||
|
* |
||||||
|
* @see Font#SS_NONE |
||||||
|
* @see Font#SS_SUPER |
||||||
|
* @see Font#SS_SUB |
||||||
|
*/ |
||||||
|
private Short typeOffset; |
||||||
|
/** |
||||||
|
* set type of text underlining to use |
||||||
|
* |
||||||
|
* @see Font#U_NONE |
||||||
|
* @see Font#U_SINGLE |
||||||
|
* @see Font#U_DOUBLE |
||||||
|
* @see Font#U_SINGLE_ACCOUNTING |
||||||
|
* @see Font#U_DOUBLE_ACCOUNTING |
||||||
|
*/ |
||||||
|
|
||||||
|
private Byte underline; |
||||||
|
/** |
||||||
|
* Set character-set to use. |
||||||
|
* |
||||||
|
* @see FontCharset |
||||||
|
* @see Font#ANSI_CHARSET |
||||||
|
* @see Font#DEFAULT_CHARSET |
||||||
|
* @see Font#SYMBOL_CHARSET |
||||||
|
*/ |
||||||
|
private Integer charset; |
||||||
|
/** |
||||||
|
* Bold |
||||||
|
*/ |
||||||
|
private Boolean bold; |
||||||
|
|
||||||
|
public static FontProperty build(HeadFontStyle headFontStyle) { |
||||||
|
if (headFontStyle == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
FontProperty styleProperty = new FontProperty(); |
||||||
|
styleProperty.setFontName(headFontStyle.fontName()); |
||||||
|
styleProperty.setFontHeightInPoints(headFontStyle.fontHeightInPoints()); |
||||||
|
styleProperty.setItalic(headFontStyle.italic()); |
||||||
|
styleProperty.setStrikeout(headFontStyle.strikeout()); |
||||||
|
styleProperty.setColor(headFontStyle.color()); |
||||||
|
styleProperty.setTypeOffset(headFontStyle.typeOffset()); |
||||||
|
styleProperty.setUnderline(headFontStyle.underline()); |
||||||
|
styleProperty.setCharset(headFontStyle.charset()); |
||||||
|
styleProperty.setBold(headFontStyle.bold()); |
||||||
|
return styleProperty; |
||||||
|
} |
||||||
|
|
||||||
|
public static FontProperty build(ContentFontStyle contentFontStyle) { |
||||||
|
if (contentFontStyle == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
FontProperty styleProperty = new FontProperty(); |
||||||
|
styleProperty.setFontName(contentFontStyle.fontName()); |
||||||
|
styleProperty.setFontHeightInPoints(contentFontStyle.fontHeightInPoints()); |
||||||
|
styleProperty.setItalic(contentFontStyle.italic()); |
||||||
|
styleProperty.setStrikeout(contentFontStyle.strikeout()); |
||||||
|
styleProperty.setColor(contentFontStyle.color()); |
||||||
|
styleProperty.setTypeOffset(contentFontStyle.typeOffset()); |
||||||
|
styleProperty.setUnderline(contentFontStyle.underline()); |
||||||
|
styleProperty.setCharset(contentFontStyle.charset()); |
||||||
|
styleProperty.setBold(contentFontStyle.bold()); |
||||||
|
return styleProperty; |
||||||
|
} |
||||||
|
|
||||||
|
public String getFontName() { |
||||||
|
return fontName; |
||||||
|
} |
||||||
|
|
||||||
|
public void setFontName(String fontName) { |
||||||
|
this.fontName = fontName; |
||||||
|
} |
||||||
|
|
||||||
|
public Short getFontHeightInPoints() { |
||||||
|
return fontHeightInPoints; |
||||||
|
} |
||||||
|
|
||||||
|
public void setFontHeightInPoints(Short fontHeightInPoints) { |
||||||
|
this.fontHeightInPoints = fontHeightInPoints; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getItalic() { |
||||||
|
return italic; |
||||||
|
} |
||||||
|
|
||||||
|
public void setItalic(Boolean italic) { |
||||||
|
this.italic = italic; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getStrikeout() { |
||||||
|
return strikeout; |
||||||
|
} |
||||||
|
|
||||||
|
public void setStrikeout(Boolean strikeout) { |
||||||
|
this.strikeout = strikeout; |
||||||
|
} |
||||||
|
|
||||||
|
public Short getColor() { |
||||||
|
return color; |
||||||
|
} |
||||||
|
|
||||||
|
public void setColor(Short color) { |
||||||
|
this.color = color; |
||||||
|
} |
||||||
|
|
||||||
|
public Short getTypeOffset() { |
||||||
|
return typeOffset; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTypeOffset(Short typeOffset) { |
||||||
|
this.typeOffset = typeOffset; |
||||||
|
} |
||||||
|
|
||||||
|
public Byte getUnderline() { |
||||||
|
return underline; |
||||||
|
} |
||||||
|
|
||||||
|
public void setUnderline(Byte underline) { |
||||||
|
this.underline = underline; |
||||||
|
} |
||||||
|
|
||||||
|
public Integer getCharset() { |
||||||
|
return charset; |
||||||
|
} |
||||||
|
|
||||||
|
public void setCharset(Integer charset) { |
||||||
|
this.charset = charset; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getBold() { |
||||||
|
return bold; |
||||||
|
} |
||||||
|
|
||||||
|
public void setBold(Boolean bold) { |
||||||
|
this.bold = bold; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,47 @@ |
|||||||
|
package com.alibaba.excel.metadata.property; |
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.write.style.ContentLoopMerge; |
||||||
|
|
||||||
|
/** |
||||||
|
* Configuration from annotations |
||||||
|
* |
||||||
|
* @author Jiaju Zhuang |
||||||
|
*/ |
||||||
|
public class LoopMergeProperty { |
||||||
|
/** |
||||||
|
* Each row |
||||||
|
*/ |
||||||
|
private int eachRow; |
||||||
|
/** |
||||||
|
* Extend column |
||||||
|
*/ |
||||||
|
private int columnExtend; |
||||||
|
|
||||||
|
public LoopMergeProperty(int eachRow, int columnExtend) { |
||||||
|
this.eachRow = eachRow; |
||||||
|
this.columnExtend = columnExtend; |
||||||
|
} |
||||||
|
|
||||||
|
public static LoopMergeProperty build(ContentLoopMerge contentLoopMerge) { |
||||||
|
if (contentLoopMerge == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
return new LoopMergeProperty(contentLoopMerge.eachRow(), contentLoopMerge.columnExtend()); |
||||||
|
} |
||||||
|
|
||||||
|
public int getEachRow() { |
||||||
|
return eachRow; |
||||||
|
} |
||||||
|
|
||||||
|
public void setEachRow(int eachRow) { |
||||||
|
this.eachRow = eachRow; |
||||||
|
} |
||||||
|
|
||||||
|
public int getColumnExtend() { |
||||||
|
return columnExtend; |
||||||
|
} |
||||||
|
|
||||||
|
public void setColumnExtend(int columnExtend) { |
||||||
|
this.columnExtend = columnExtend; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,74 @@ |
|||||||
|
package com.alibaba.excel.metadata.property; |
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.write.style.OnceAbsoluteMerge; |
||||||
|
|
||||||
|
/** |
||||||
|
* Configuration from annotations |
||||||
|
* |
||||||
|
* @author Jiaju Zhuang |
||||||
|
*/ |
||||||
|
public class OnceAbsoluteMergeProperty { |
||||||
|
/** |
||||||
|
* First row |
||||||
|
*/ |
||||||
|
private int firstRowIndex; |
||||||
|
/** |
||||||
|
* Last row |
||||||
|
*/ |
||||||
|
private int lastRowIndex; |
||||||
|
/** |
||||||
|
* First column |
||||||
|
*/ |
||||||
|
private int firstColumnIndex; |
||||||
|
/** |
||||||
|
* Last row |
||||||
|
*/ |
||||||
|
private int lastColumnIndex; |
||||||
|
|
||||||
|
public OnceAbsoluteMergeProperty(int firstRowIndex, int lastRowIndex, int firstColumnIndex, int lastColumnIndex) { |
||||||
|
this.firstRowIndex = firstRowIndex; |
||||||
|
this.lastRowIndex = lastRowIndex; |
||||||
|
this.firstColumnIndex = firstColumnIndex; |
||||||
|
this.lastColumnIndex = lastColumnIndex; |
||||||
|
} |
||||||
|
|
||||||
|
public static OnceAbsoluteMergeProperty build(OnceAbsoluteMerge onceAbsoluteMerge) { |
||||||
|
if (onceAbsoluteMerge == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
return new OnceAbsoluteMergeProperty(onceAbsoluteMerge.firstRowIndex(), onceAbsoluteMerge.lastRowIndex(), |
||||||
|
onceAbsoluteMerge.firstColumnIndex(), onceAbsoluteMerge.lastColumnIndex()); |
||||||
|
} |
||||||
|
|
||||||
|
public int getFirstRowIndex() { |
||||||
|
return firstRowIndex; |
||||||
|
} |
||||||
|
|
||||||
|
public void setFirstRowIndex(int firstRowIndex) { |
||||||
|
this.firstRowIndex = firstRowIndex; |
||||||
|
} |
||||||
|
|
||||||
|
public int getLastRowIndex() { |
||||||
|
return lastRowIndex; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLastRowIndex(int lastRowIndex) { |
||||||
|
this.lastRowIndex = lastRowIndex; |
||||||
|
} |
||||||
|
|
||||||
|
public int getFirstColumnIndex() { |
||||||
|
return firstColumnIndex; |
||||||
|
} |
||||||
|
|
||||||
|
public void setFirstColumnIndex(int firstColumnIndex) { |
||||||
|
this.firstColumnIndex = firstColumnIndex; |
||||||
|
} |
||||||
|
|
||||||
|
public int getLastColumnIndex() { |
||||||
|
return lastColumnIndex; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLastColumnIndex(int lastColumnIndex) { |
||||||
|
this.lastColumnIndex = lastColumnIndex; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,377 @@ |
|||||||
|
package com.alibaba.excel.metadata.property; |
||||||
|
|
||||||
|
import org.apache.poi.ss.usermodel.BorderStyle; |
||||||
|
import org.apache.poi.ss.usermodel.BuiltinFormats; |
||||||
|
import org.apache.poi.ss.usermodel.FillPatternType; |
||||||
|
import org.apache.poi.ss.usermodel.HorizontalAlignment; |
||||||
|
import org.apache.poi.ss.usermodel.IgnoredErrorType; |
||||||
|
import org.apache.poi.ss.usermodel.IndexedColors; |
||||||
|
import org.apache.poi.ss.usermodel.VerticalAlignment; |
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.write.style.ContentStyle; |
||||||
|
import com.alibaba.excel.annotation.write.style.HeadStyle; |
||||||
|
import com.alibaba.excel.write.metadata.style.WriteFont; |
||||||
|
|
||||||
|
/** |
||||||
|
* Configuration from annotations |
||||||
|
* |
||||||
|
* @author Jiaju Zhuang |
||||||
|
*/ |
||||||
|
public class StyleProperty { |
||||||
|
/** |
||||||
|
* Set the data format (must be a valid format). Built in formats are defined at {@link BuiltinFormats}. |
||||||
|
*/ |
||||||
|
private Short dataFormat; |
||||||
|
/** |
||||||
|
* Set the font for this style |
||||||
|
*/ |
||||||
|
private WriteFont writeFont; |
||||||
|
/** |
||||||
|
* Set the cell's using this style to be hidden |
||||||
|
*/ |
||||||
|
private Boolean hidden; |
||||||
|
|
||||||
|
/** |
||||||
|
* Set the cell's using this style to be locked |
||||||
|
*/ |
||||||
|
private Boolean locked; |
||||||
|
/** |
||||||
|
* Turn on or off "Quote Prefix" or "123 Prefix" for the style, which is used to tell Excel that the thing which |
||||||
|
* looks like a number or a formula shouldn't be treated as on. Turning this on is somewhat (but not completely, see |
||||||
|
* {@link IgnoredErrorType}) like prefixing the cell value with a ' in Excel |
||||||
|
*/ |
||||||
|
private Boolean quotePrefix; |
||||||
|
/** |
||||||
|
* Set the type of horizontal alignment for the cell |
||||||
|
*/ |
||||||
|
private HorizontalAlignment horizontalAlignment; |
||||||
|
/** |
||||||
|
* Set whether the text should be wrapped. Setting this flag to <code>true</code> make all content visible within a |
||||||
|
* cell by displaying it on multiple lines |
||||||
|
* |
||||||
|
*/ |
||||||
|
private Boolean wrapped; |
||||||
|
/** |
||||||
|
* Set the type of vertical alignment for the cell |
||||||
|
*/ |
||||||
|
private VerticalAlignment verticalAlignment; |
||||||
|
/** |
||||||
|
* Set the degree of rotation for the text in the cell. |
||||||
|
* |
||||||
|
* Note: HSSF uses values from -90 to 90 degrees, whereas XSSF uses values from 0 to 180 degrees. The |
||||||
|
* implementations of this method will map between these two value-ranges accordingly, however the corresponding |
||||||
|
* getter is returning values in the range mandated by the current type of Excel file-format that this CellStyle is |
||||||
|
* applied to. |
||||||
|
*/ |
||||||
|
private Short rotation; |
||||||
|
/** |
||||||
|
* Set the number of spaces to indent the text in the cell |
||||||
|
*/ |
||||||
|
private Short indent; |
||||||
|
/** |
||||||
|
* Set the type of border to use for the left border of the cell |
||||||
|
*/ |
||||||
|
private BorderStyle borderLeft; |
||||||
|
/** |
||||||
|
* Set the type of border to use for the right border of the cell |
||||||
|
*/ |
||||||
|
private BorderStyle borderRight; |
||||||
|
/** |
||||||
|
* Set the type of border to use for the top border of the cell |
||||||
|
*/ |
||||||
|
private BorderStyle borderTop; |
||||||
|
|
||||||
|
/** |
||||||
|
* Set the type of border to use for the bottom border of the cell |
||||||
|
*/ |
||||||
|
private BorderStyle borderBottom; |
||||||
|
/** |
||||||
|
* Set the color to use for the left border |
||||||
|
* |
||||||
|
* @see IndexedColors |
||||||
|
*/ |
||||||
|
private Short leftBorderColor; |
||||||
|
|
||||||
|
/** |
||||||
|
* Set the color to use for the right border |
||||||
|
* |
||||||
|
* @see IndexedColors |
||||||
|
* |
||||||
|
*/ |
||||||
|
private Short rightBorderColor; |
||||||
|
|
||||||
|
/** |
||||||
|
* Set the color to use for the top border |
||||||
|
* |
||||||
|
* @see IndexedColors |
||||||
|
* |
||||||
|
*/ |
||||||
|
private Short topBorderColor; |
||||||
|
/** |
||||||
|
* Set the color to use for the bottom border |
||||||
|
* |
||||||
|
* @see IndexedColors |
||||||
|
* |
||||||
|
*/ |
||||||
|
private Short bottomBorderColor; |
||||||
|
/** |
||||||
|
* Setting to one fills the cell with the foreground color... No idea about other values |
||||||
|
* |
||||||
|
* @see FillPatternType#SOLID_FOREGROUND |
||||||
|
*/ |
||||||
|
private FillPatternType fillPatternType; |
||||||
|
|
||||||
|
/** |
||||||
|
* Set the background fill color. |
||||||
|
* |
||||||
|
* @see IndexedColors |
||||||
|
* |
||||||
|
*/ |
||||||
|
private Short fillBackgroundColor; |
||||||
|
|
||||||
|
/** |
||||||
|
* Set the foreground fill color <i>Note: Ensure Foreground color is set prior to background color.</i> |
||||||
|
* |
||||||
|
* @see IndexedColors |
||||||
|
* |
||||||
|
*/ |
||||||
|
private Short fillForegroundColor; |
||||||
|
/** |
||||||
|
* Controls if the Cell should be auto-sized to shrink to fit if the text is too long |
||||||
|
*/ |
||||||
|
private Boolean shrinkToFit; |
||||||
|
|
||||||
|
public static StyleProperty build(HeadStyle headStyle) { |
||||||
|
if (headStyle == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
StyleProperty styleProperty = new StyleProperty(); |
||||||
|
styleProperty.setDataFormat(headStyle.dataFormat()); |
||||||
|
styleProperty.setHidden(headStyle.hidden()); |
||||||
|
styleProperty.setLocked(headStyle.locked()); |
||||||
|
styleProperty.setQuotePrefix(headStyle.quotePrefix()); |
||||||
|
styleProperty.setHorizontalAlignment(headStyle.horizontalAlignment()); |
||||||
|
styleProperty.setWrapped(headStyle.wrapped()); |
||||||
|
styleProperty.setVerticalAlignment(headStyle.verticalAlignment()); |
||||||
|
styleProperty.setRotation(headStyle.rotation()); |
||||||
|
styleProperty.setIndent(headStyle.indent()); |
||||||
|
styleProperty.setBorderLeft(headStyle.borderLeft()); |
||||||
|
styleProperty.setBorderRight(headStyle.borderRight()); |
||||||
|
styleProperty.setBorderTop(headStyle.borderTop()); |
||||||
|
styleProperty.setBorderBottom(headStyle.borderBottom()); |
||||||
|
styleProperty.setLeftBorderColor(headStyle.leftBorderColor()); |
||||||
|
styleProperty.setRightBorderColor(headStyle.rightBorderColor()); |
||||||
|
styleProperty.setTopBorderColor(headStyle.topBorderColor()); |
||||||
|
styleProperty.setBottomBorderColor(headStyle.bottomBorderColor()); |
||||||
|
styleProperty.setFillPatternType(headStyle.fillPatternType()); |
||||||
|
styleProperty.setFillBackgroundColor(headStyle.fillBackgroundColor()); |
||||||
|
styleProperty.setFillForegroundColor(headStyle.fillForegroundColor()); |
||||||
|
styleProperty.setShrinkToFit(headStyle.shrinkToFit()); |
||||||
|
return styleProperty; |
||||||
|
} |
||||||
|
|
||||||
|
public static StyleProperty build(ContentStyle contentStyle) { |
||||||
|
if (contentStyle == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
StyleProperty styleProperty = new StyleProperty(); |
||||||
|
styleProperty.setDataFormat(contentStyle.dataFormat()); |
||||||
|
styleProperty.setHidden(contentStyle.hidden()); |
||||||
|
styleProperty.setLocked(contentStyle.locked()); |
||||||
|
styleProperty.setQuotePrefix(contentStyle.quotePrefix()); |
||||||
|
styleProperty.setHorizontalAlignment(contentStyle.horizontalAlignment()); |
||||||
|
styleProperty.setWrapped(contentStyle.wrapped()); |
||||||
|
styleProperty.setVerticalAlignment(contentStyle.verticalAlignment()); |
||||||
|
styleProperty.setRotation(contentStyle.rotation()); |
||||||
|
styleProperty.setIndent(contentStyle.indent()); |
||||||
|
styleProperty.setBorderLeft(contentStyle.borderLeft()); |
||||||
|
styleProperty.setBorderRight(contentStyle.borderRight()); |
||||||
|
styleProperty.setBorderTop(contentStyle.borderTop()); |
||||||
|
styleProperty.setBorderBottom(contentStyle.borderBottom()); |
||||||
|
styleProperty.setLeftBorderColor(contentStyle.leftBorderColor()); |
||||||
|
styleProperty.setRightBorderColor(contentStyle.rightBorderColor()); |
||||||
|
styleProperty.setTopBorderColor(contentStyle.topBorderColor()); |
||||||
|
styleProperty.setBottomBorderColor(contentStyle.bottomBorderColor()); |
||||||
|
styleProperty.setFillPatternType(contentStyle.fillPatternType()); |
||||||
|
styleProperty.setFillBackgroundColor(contentStyle.fillBackgroundColor()); |
||||||
|
styleProperty.setFillForegroundColor(contentStyle.fillForegroundColor()); |
||||||
|
styleProperty.setShrinkToFit(contentStyle.shrinkToFit()); |
||||||
|
return styleProperty; |
||||||
|
} |
||||||
|
|
||||||
|
public Short getDataFormat() { |
||||||
|
return dataFormat; |
||||||
|
} |
||||||
|
|
||||||
|
public void setDataFormat(Short dataFormat) { |
||||||
|
this.dataFormat = dataFormat; |
||||||
|
} |
||||||
|
|
||||||
|
public WriteFont getWriteFont() { |
||||||
|
return writeFont; |
||||||
|
} |
||||||
|
|
||||||
|
public void setWriteFont(WriteFont writeFont) { |
||||||
|
this.writeFont = writeFont; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getHidden() { |
||||||
|
return hidden; |
||||||
|
} |
||||||
|
|
||||||
|
public void setHidden(Boolean hidden) { |
||||||
|
this.hidden = hidden; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getLocked() { |
||||||
|
return locked; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLocked(Boolean locked) { |
||||||
|
this.locked = locked; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getQuotePrefix() { |
||||||
|
return quotePrefix; |
||||||
|
} |
||||||
|
|
||||||
|
public void setQuotePrefix(Boolean quotePrefix) { |
||||||
|
this.quotePrefix = quotePrefix; |
||||||
|
} |
||||||
|
|
||||||
|
public HorizontalAlignment getHorizontalAlignment() { |
||||||
|
return horizontalAlignment; |
||||||
|
} |
||||||
|
|
||||||
|
public void setHorizontalAlignment(HorizontalAlignment horizontalAlignment) { |
||||||
|
this.horizontalAlignment = horizontalAlignment; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getWrapped() { |
||||||
|
return wrapped; |
||||||
|
} |
||||||
|
|
||||||
|
public void setWrapped(Boolean wrapped) { |
||||||
|
this.wrapped = wrapped; |
||||||
|
} |
||||||
|
|
||||||
|
public VerticalAlignment getVerticalAlignment() { |
||||||
|
return verticalAlignment; |
||||||
|
} |
||||||
|
|
||||||
|
public void setVerticalAlignment(VerticalAlignment verticalAlignment) { |
||||||
|
this.verticalAlignment = verticalAlignment; |
||||||
|
} |
||||||
|
|
||||||
|
public Short getRotation() { |
||||||
|
return rotation; |
||||||
|
} |
||||||
|
|
||||||
|
public void setRotation(Short rotation) { |
||||||
|
this.rotation = rotation; |
||||||
|
} |
||||||
|
|
||||||
|
public Short getIndent() { |
||||||
|
return indent; |
||||||
|
} |
||||||
|
|
||||||
|
public void setIndent(Short indent) { |
||||||
|
this.indent = indent; |
||||||
|
} |
||||||
|
|
||||||
|
public BorderStyle getBorderLeft() { |
||||||
|
return borderLeft; |
||||||
|
} |
||||||
|
|
||||||
|
public void setBorderLeft(BorderStyle borderLeft) { |
||||||
|
this.borderLeft = borderLeft; |
||||||
|
} |
||||||
|
|
||||||
|
public BorderStyle getBorderRight() { |
||||||
|
return borderRight; |
||||||
|
} |
||||||
|
|
||||||
|
public void setBorderRight(BorderStyle borderRight) { |
||||||
|
this.borderRight = borderRight; |
||||||
|
} |
||||||
|
|
||||||
|
public BorderStyle getBorderTop() { |
||||||
|
return borderTop; |
||||||
|
} |
||||||
|
|
||||||
|
public void setBorderTop(BorderStyle borderTop) { |
||||||
|
this.borderTop = borderTop; |
||||||
|
} |
||||||
|
|
||||||
|
public BorderStyle getBorderBottom() { |
||||||
|
return borderBottom; |
||||||
|
} |
||||||
|
|
||||||
|
public void setBorderBottom(BorderStyle borderBottom) { |
||||||
|
this.borderBottom = borderBottom; |
||||||
|
} |
||||||
|
|
||||||
|
public Short getLeftBorderColor() { |
||||||
|
return leftBorderColor; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLeftBorderColor(Short leftBorderColor) { |
||||||
|
this.leftBorderColor = leftBorderColor; |
||||||
|
} |
||||||
|
|
||||||
|
public Short getRightBorderColor() { |
||||||
|
return rightBorderColor; |
||||||
|
} |
||||||
|
|
||||||
|
public void setRightBorderColor(Short rightBorderColor) { |
||||||
|
this.rightBorderColor = rightBorderColor; |
||||||
|
} |
||||||
|
|
||||||
|
public Short getTopBorderColor() { |
||||||
|
return topBorderColor; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTopBorderColor(Short topBorderColor) { |
||||||
|
this.topBorderColor = topBorderColor; |
||||||
|
} |
||||||
|
|
||||||
|
public Short getBottomBorderColor() { |
||||||
|
return bottomBorderColor; |
||||||
|
} |
||||||
|
|
||||||
|
public void setBottomBorderColor(Short bottomBorderColor) { |
||||||
|
this.bottomBorderColor = bottomBorderColor; |
||||||
|
} |
||||||
|
|
||||||
|
public FillPatternType getFillPatternType() { |
||||||
|
return fillPatternType; |
||||||
|
} |
||||||
|
|
||||||
|
public void setFillPatternType(FillPatternType fillPatternType) { |
||||||
|
this.fillPatternType = fillPatternType; |
||||||
|
} |
||||||
|
|
||||||
|
public Short getFillBackgroundColor() { |
||||||
|
return fillBackgroundColor; |
||||||
|
} |
||||||
|
|
||||||
|
public void setFillBackgroundColor(Short fillBackgroundColor) { |
||||||
|
this.fillBackgroundColor = fillBackgroundColor; |
||||||
|
} |
||||||
|
|
||||||
|
public Short getFillForegroundColor() { |
||||||
|
return fillForegroundColor; |
||||||
|
} |
||||||
|
|
||||||
|
public void setFillForegroundColor(Short fillForegroundColor) { |
||||||
|
this.fillForegroundColor = fillForegroundColor; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getShrinkToFit() { |
||||||
|
return shrinkToFit; |
||||||
|
} |
||||||
|
|
||||||
|
public void setShrinkToFit(Boolean shrinkToFit) { |
||||||
|
this.shrinkToFit = shrinkToFit; |
||||||
|
} |
||||||
|
} |
@ -1,77 +0,0 @@ |
|||||||
package com.alibaba.easyexcel.test.demo.read; |
|
||||||
|
|
||||||
import java.util.ArrayList; |
|
||||||
import java.util.List; |
|
||||||
import java.util.Map; |
|
||||||
|
|
||||||
import org.slf4j.Logger; |
|
||||||
import org.slf4j.LoggerFactory; |
|
||||||
|
|
||||||
import com.alibaba.excel.context.AnalysisContext; |
|
||||||
import com.alibaba.excel.event.AnalysisEventListener; |
|
||||||
import com.alibaba.excel.exception.ExcelDataConvertException; |
|
||||||
import com.alibaba.fastjson.JSON; |
|
||||||
|
|
||||||
/** |
|
||||||
* 读取单元格的批注 |
|
||||||
* |
|
||||||
* @author: kaiux |
|
||||||
* @date: 2019-10-23 14:10 |
|
||||||
**/ |
|
||||||
public class DemoCellCommentsListener extends AnalysisEventListener<DemoData> { |
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(DemoCellCommentsListener.class); |
|
||||||
/** |
|
||||||
* 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收 |
|
||||||
*/ |
|
||||||
private static final int BATCH_COUNT = 5; |
|
||||||
List<DemoData> list = new ArrayList<DemoData>(); |
|
||||||
|
|
||||||
/** |
|
||||||
* 在转换异常 获取其他异常下会调用本接口。抛出异常则停止读取。如果这里不抛出异常则 继续读取下一行。 |
|
||||||
* |
|
||||||
* @param exception |
|
||||||
* @param context |
|
||||||
* @throws Exception |
|
||||||
*/ |
|
||||||
@Override |
|
||||||
public void onException(Exception exception, AnalysisContext context) { |
|
||||||
LOGGER.error("解析失败,但是继续解析下一行:{}", exception.getMessage()); |
|
||||||
if (exception instanceof ExcelDataConvertException) { |
|
||||||
ExcelDataConvertException excelDataConvertException = (ExcelDataConvertException)exception; |
|
||||||
LOGGER.error("第{}行,第{}列解析异常", excelDataConvertException.getRowIndex(), |
|
||||||
excelDataConvertException.getColumnIndex()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 这里会一行行的返回头 |
|
||||||
* |
|
||||||
* @param headMap |
|
||||||
* @param context |
|
||||||
*/ |
|
||||||
@Override |
|
||||||
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void invoke(DemoData data, AnalysisContext context) { |
|
||||||
LOGGER.info("解析到一条数据:{}", JSON.toJSONString(data)); |
|
||||||
if (list.size() >= BATCH_COUNT) { |
|
||||||
saveData(); |
|
||||||
list.clear(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void doAfterAllAnalysed(AnalysisContext context) { |
|
||||||
saveData(); |
|
||||||
LOGGER.info("所有数据解析完成!"); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 加上存储数据库 |
|
||||||
*/ |
|
||||||
private void saveData() { |
|
||||||
LOGGER.info("{}条数据,开始存储数据库!", list.size()); |
|
||||||
LOGGER.info("存储数据库成功!"); |
|
||||||
} |
|
||||||
} |
|
@ -0,0 +1,14 @@ |
|||||||
|
package com.alibaba.easyexcel.test.demo.read; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Jiaju Zhuang |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class DemoExtraData { |
||||||
|
|
||||||
|
private String row1; |
||||||
|
|
||||||
|
private String row2; |
||||||
|
} |
@ -0,0 +1,58 @@ |
|||||||
|
package com.alibaba.easyexcel.test.demo.read; |
||||||
|
|
||||||
|
import org.junit.Assert; |
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
|
||||||
|
import com.alibaba.excel.context.AnalysisContext; |
||||||
|
import com.alibaba.excel.event.AnalysisEventListener; |
||||||
|
import com.alibaba.excel.metadata.CellExtra; |
||||||
|
import com.alibaba.fastjson.JSON; |
||||||
|
|
||||||
|
/** |
||||||
|
* 读取单元格的批注 |
||||||
|
* |
||||||
|
* @author: kaiux |
||||||
|
* @date: 2019-10-23 14:10 |
||||||
|
**/ |
||||||
|
public class DemoExtraListener extends AnalysisEventListener<DemoExtraData> { |
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(DemoDataListener.class); |
||||||
|
|
||||||
|
@Override |
||||||
|
public void invoke(DemoExtraData data, AnalysisContext context) {} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void doAfterAllAnalysed(AnalysisContext context) {} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void extra(CellExtra extra, AnalysisContext context) { |
||||||
|
LOGGER.info("读取到了一条额外信息:{}", JSON.toJSONString(extra)); |
||||||
|
switch (extra.getType()) { |
||||||
|
case COMMENT: |
||||||
|
LOGGER.info("额外信息是批注,在rowIndex:{},columnIndex;{},内容是:{}", extra.getRowIndex(), extra.getColumnIndex(), |
||||||
|
extra.getText()); |
||||||
|
break; |
||||||
|
case HYPERLINK: |
||||||
|
if ("Sheet1!A1".equals(extra.getText())) { |
||||||
|
LOGGER.info("额外信息是超链接,在rowIndex:{},columnIndex;{},内容是:{}", extra.getRowIndex(), |
||||||
|
extra.getColumnIndex(), extra.getText()); |
||||||
|
} else if ("Sheet2!A1".equals(extra.getText())) { |
||||||
|
LOGGER.info( |
||||||
|
"额外信息是超链接,而且覆盖了一个区间,在firstRowIndex:{},firstColumnIndex;{},lastRowIndex:{},lastColumnIndex:{}," |
||||||
|
+ "内容是:{}", |
||||||
|
extra.getFirstRowIndex(), extra.getFirstColumnIndex(), extra.getLastRowIndex(), |
||||||
|
extra.getLastColumnIndex(), extra.getText()); |
||||||
|
} else { |
||||||
|
Assert.fail("Unknown hyperlink!"); |
||||||
|
} |
||||||
|
break; |
||||||
|
case MERGE: |
||||||
|
LOGGER.info( |
||||||
|
"额外信息是超链接,而且覆盖了一个区间,在firstRowIndex:{},firstColumnIndex;{},lastRowIndex:{},lastColumnIndex:{}", |
||||||
|
extra.getFirstRowIndex(), extra.getFirstColumnIndex(), extra.getLastRowIndex(), |
||||||
|
extra.getLastColumnIndex()); |
||||||
|
break; |
||||||
|
default: |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,27 @@ |
|||||||
|
package com.alibaba.easyexcel.test.demo.write; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty; |
||||||
|
import com.alibaba.excel.annotation.write.style.ContentLoopMerge; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
/** |
||||||
|
* 样式的数据类 |
||||||
|
* |
||||||
|
* @author Jiaju Zhuang |
||||||
|
**/ |
||||||
|
@Data |
||||||
|
// 将第6-7行的2-3列合并成一个单元格
|
||||||
|
// @OnceAbsoluteMerge(firstRowIndex = 5, lastRowIndex = 6, firstColumnIndex = 1, lastColumnIndex = 2)
|
||||||
|
public class DemoMergeData { |
||||||
|
// 这一列 每隔2行 合并单元格
|
||||||
|
@ContentLoopMerge(eachRow = 2) |
||||||
|
@ExcelProperty("字符串标题") |
||||||
|
private String string; |
||||||
|
@ExcelProperty("日期标题") |
||||||
|
private Date date; |
||||||
|
@ExcelProperty("数字标题") |
||||||
|
private Double doubleData; |
||||||
|
} |
@ -0,0 +1,44 @@ |
|||||||
|
package com.alibaba.easyexcel.test.demo.write; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
import org.apache.poi.ss.usermodel.FillPatternType; |
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty; |
||||||
|
import com.alibaba.excel.annotation.write.style.ContentFontStyle; |
||||||
|
import com.alibaba.excel.annotation.write.style.ContentStyle; |
||||||
|
import com.alibaba.excel.annotation.write.style.HeadFontStyle; |
||||||
|
import com.alibaba.excel.annotation.write.style.HeadStyle; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
/** |
||||||
|
* 样式的数据类 |
||||||
|
* |
||||||
|
* @author Jiaju Zhuang |
||||||
|
**/ |
||||||
|
@Data |
||||||
|
// 头背景设置成红色 IndexedColors.RED.getIndex()
|
||||||
|
@HeadStyle(fillPatternType = FillPatternType.SOLID_FOREGROUND, fillForegroundColor = 10) |
||||||
|
// 头字体设置成20
|
||||||
|
@HeadFontStyle(fontHeightInPoints = 20) |
||||||
|
// 内容的背景设置成绿色 IndexedColors.GREEN.getIndex()
|
||||||
|
@ContentStyle(fillPatternType = FillPatternType.SOLID_FOREGROUND, fillForegroundColor = 17) |
||||||
|
// 内容字体设置成20
|
||||||
|
@ContentFontStyle(fontHeightInPoints = 20) |
||||||
|
public class DemoStyleData { |
||||||
|
// 字符串的头背景设置成粉红 IndexedColors.PINK.getIndex()
|
||||||
|
@HeadStyle(fillPatternType = FillPatternType.SOLID_FOREGROUND, fillForegroundColor = 14) |
||||||
|
// 字符串的头字体设置成20
|
||||||
|
@HeadFontStyle(fontHeightInPoints = 30) |
||||||
|
// 字符串的内容的背景设置成天蓝 IndexedColors.SKY_BLUE.getIndex()
|
||||||
|
@ContentStyle(fillPatternType = FillPatternType.SOLID_FOREGROUND, fillForegroundColor = 40) |
||||||
|
// 字符串的内容字体设置成20
|
||||||
|
@ContentFontStyle(fontHeightInPoints = 30) |
||||||
|
@ExcelProperty("字符串标题") |
||||||
|
private String string; |
||||||
|
@ExcelProperty("日期标题") |
||||||
|
private Date date; |
||||||
|
@ExcelProperty("数字标题") |
||||||
|
private Double doubleData; |
||||||
|
} |
Binary file not shown.
Loading…
Reference in new issue