Merge remote-tracking branch 'origin/3.x' into 3.x
This commit is contained in:
commit
332d2de010
1
easyexcel
Submodule
1
easyexcel
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 4076b897953b18f9e96c278c6929325e89f2be12
|
@ -0,0 +1,61 @@
|
||||
package com.alibaba.excel.annotation.write.style;
|
||||
|
||||
|
||||
import org.apache.poi.ss.usermodel.ClientAnchor;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Inherited;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
import java.lang.annotation.Retention;
|
||||
|
||||
/**
|
||||
* This annotation is used to set the position of a picture.
|
||||
* See {@link ClientAnchor}
|
||||
*/
|
||||
|
||||
@Target(ElementType.FIELD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Inherited
|
||||
public @interface ImagePosition {
|
||||
|
||||
/**
|
||||
* The x coordinate within the first cell.
|
||||
*/
|
||||
int dx1();
|
||||
|
||||
/**
|
||||
* The y coordinate within the first cell.
|
||||
*/
|
||||
int dy1();
|
||||
|
||||
/**
|
||||
* The x coordinate within the second cell.
|
||||
*/
|
||||
int dx2();
|
||||
|
||||
/**
|
||||
* The y coordinate within the second cell
|
||||
*/
|
||||
int dy2();
|
||||
|
||||
/**
|
||||
* 0-based column of the first cell.
|
||||
*/
|
||||
short col1();
|
||||
|
||||
/**
|
||||
* 0-based row of the first cell.
|
||||
*/
|
||||
int row1();
|
||||
|
||||
/**
|
||||
* 0-based column of the second cell.
|
||||
*/
|
||||
short col2();
|
||||
|
||||
/**
|
||||
* 0-based row of the second cell.
|
||||
*/
|
||||
int row2();
|
||||
}
|
@ -1,5 +1,8 @@
|
||||
package com.alibaba.excel.converters.bytearray;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
|
||||
import com.alibaba.excel.annotation.write.style.ImagePosition;
|
||||
import com.alibaba.excel.converters.Converter;
|
||||
import com.alibaba.excel.enums.CellDataTypeEnum;
|
||||
import com.alibaba.excel.metadata.CellData;
|
||||
@ -35,7 +38,12 @@ public class BoxingByteArrayImageConverter implements Converter<Byte[]> {
|
||||
for (int i = 0; i < value.length; i++) {
|
||||
byteValue[i] = value[i];
|
||||
}
|
||||
return new CellData<>(byteValue);
|
||||
ImagePosition imagePosition = contentProperty.getField().getAnnotation(ImagePosition.class);
|
||||
if (imagePosition != null) {
|
||||
return new CellData(byteValue, imagePosition);
|
||||
} else {
|
||||
return new CellData(byteValue);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,8 @@
|
||||
package com.alibaba.excel.converters.bytearray;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
|
||||
import com.alibaba.excel.annotation.write.style.ImagePosition;
|
||||
import com.alibaba.excel.converters.Converter;
|
||||
import com.alibaba.excel.enums.CellDataTypeEnum;
|
||||
import com.alibaba.excel.metadata.CellData;
|
||||
@ -23,15 +26,21 @@ public class ByteArrayImageConverter implements Converter<byte[]> {
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
public byte[] convertToJavaData(CellData<?> cellData, ExcelContentProperty contentProperty,
|
||||
GlobalConfiguration globalConfiguration) {
|
||||
throw new UnsupportedOperationException("Cannot convert images to byte arrays");
|
||||
}
|
||||
|
||||
@Override
|
||||
public CellData<?> convertToExcelData(byte[] value, ExcelContentProperty contentProperty,
|
||||
GlobalConfiguration globalConfiguration) {
|
||||
return new CellData<>(value);
|
||||
public CellData convertToExcelData(byte[] value, ExcelContentProperty contentProperty,
|
||||
GlobalConfiguration globalConfiguration) {
|
||||
ImagePosition imagePosition = contentProperty.getField().getAnnotation(ImagePosition.class);
|
||||
if (imagePosition != null) {
|
||||
return new CellData(value, imagePosition);
|
||||
} else {
|
||||
return new CellData(value);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ package com.alibaba.excel.converters.file;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import com.alibaba.excel.annotation.write.style.ImagePosition;
|
||||
import com.alibaba.excel.converters.Converter;
|
||||
import com.alibaba.excel.enums.CellDataTypeEnum;
|
||||
import com.alibaba.excel.metadata.CellData;
|
||||
@ -35,7 +35,11 @@ public class FileImageConverter implements Converter<File> {
|
||||
@Override
|
||||
public CellData<?> convertToExcelData(File value, ExcelContentProperty contentProperty,
|
||||
GlobalConfiguration globalConfiguration) throws IOException {
|
||||
return new CellData<>(FileUtils.readFileToByteArray(value));
|
||||
ImagePosition imagePosition = contentProperty.getField().getAnnotation(ImagePosition.class);
|
||||
if (imagePosition != null) {
|
||||
return new CellData(FileUtils.readFileToByteArray(value), imagePosition);
|
||||
} else {
|
||||
return new CellData(FileUtils.readFileToByteArray(value));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2,12 +2,15 @@ package com.alibaba.excel.converters.inputstream;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.lang.annotation.Annotation;
|
||||
|
||||
import com.alibaba.excel.annotation.write.style.ImagePosition;
|
||||
import com.alibaba.excel.converters.Converter;
|
||||
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;
|
||||
import com.alibaba.excel.util.FileUtils;
|
||||
import com.alibaba.excel.util.IoUtils;
|
||||
|
||||
/**
|
||||
@ -35,7 +38,12 @@ public class InputStreamImageConverter implements Converter<InputStream> {
|
||||
@Override
|
||||
public CellData<?> convertToExcelData(InputStream value, ExcelContentProperty contentProperty,
|
||||
GlobalConfiguration globalConfiguration) throws IOException {
|
||||
return new CellData<>(IoUtils.toByteArray(value));
|
||||
ImagePosition imagePosition = contentProperty.getField().getAnnotation(ImagePosition.class);
|
||||
if (imagePosition != null) {
|
||||
return new CellData(IoUtils.toByteArray(value), imagePosition);
|
||||
} else {
|
||||
return new CellData(IoUtils.toByteArray(value));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2,13 +2,16 @@ package com.alibaba.excel.converters.string;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.annotation.Annotation;
|
||||
|
||||
import com.alibaba.excel.annotation.write.style.ImagePosition;
|
||||
import com.alibaba.excel.converters.Converter;
|
||||
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;
|
||||
import com.alibaba.excel.util.FileUtils;
|
||||
import com.alibaba.excel.util.IoUtils;
|
||||
|
||||
/**
|
||||
* String and image converter
|
||||
@ -35,7 +38,12 @@ public class StringImageConverter implements Converter<String> {
|
||||
@Override
|
||||
public CellData<?> convertToExcelData(String value, ExcelContentProperty contentProperty,
|
||||
GlobalConfiguration globalConfiguration) throws IOException {
|
||||
return new CellData<>(FileUtils.readFileToByteArray(new File(value)));
|
||||
ImagePosition imagePosition = contentProperty.getField().getAnnotation(ImagePosition.class);
|
||||
if (imagePosition != null) {
|
||||
return new CellData(FileUtils.readFileToByteArray(new File(value)), imagePosition);
|
||||
} else {
|
||||
return new CellData(FileUtils.readFileToByteArray(new File(value)));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,9 +1,10 @@
|
||||
package com.alibaba.excel.metadata;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import com.alibaba.excel.annotation.write.style.ImagePosition;
|
||||
import java.util.Date;
|
||||
|
||||
import com.alibaba.excel.enums.CellDataTypeEnum;
|
||||
import com.alibaba.excel.metadata.property.ImagePositionProperty;
|
||||
import com.alibaba.excel.util.StringUtils;
|
||||
|
||||
import lombok.Getter;
|
||||
@ -35,6 +36,16 @@ public class CellData<T> extends AbstractCell {
|
||||
private Boolean formula;
|
||||
private String formulaValue;
|
||||
private byte[] imageValue;
|
||||
|
||||
/**
|
||||
* Keep the information of image position in annotation.
|
||||
*/
|
||||
private ImagePositionProperty imagePositionProperty;
|
||||
|
||||
/**
|
||||
* It will be set true when using annotation to set the image's position.
|
||||
*/
|
||||
private Boolean useImagePositionProperty = false;
|
||||
/**
|
||||
* Support only when writing.
|
||||
*/
|
||||
@ -60,6 +71,8 @@ public class CellData<T> extends AbstractCell {
|
||||
this.formula = other.formula;
|
||||
this.formulaValue = other.formulaValue;
|
||||
this.imageValue = other.imageValue;
|
||||
this.imagePositionProperty = other.imagePositionProperty;
|
||||
this.useImagePositionProperty = other.useImagePositionProperty;
|
||||
this.dataFormat = other.dataFormat;
|
||||
this.dataFormatString = other.dataFormatString;
|
||||
this.data = other.data;
|
||||
@ -113,6 +126,20 @@ public class CellData<T> extends AbstractCell {
|
||||
this.formula = Boolean.FALSE;
|
||||
}
|
||||
|
||||
public CellData(byte[] imageValue, ImagePosition imagePosition) {
|
||||
if (imageValue == null) {
|
||||
throw new IllegalArgumentException("ImageValue can not be null");
|
||||
}
|
||||
if (imagePosition == null) {
|
||||
throw new IllegalArgumentException("ImagePosition can not be null");
|
||||
}
|
||||
this.type = CellDataTypeEnum.IMAGE;
|
||||
this.imageValue = imageValue;
|
||||
this.imagePositionProperty = ImagePositionProperty.build(imagePosition);
|
||||
this.useImagePositionProperty = true;
|
||||
this.formula = Boolean.FALSE;
|
||||
}
|
||||
|
||||
public CellData(Boolean booleanValue) {
|
||||
if (booleanValue == null) {
|
||||
throw new IllegalArgumentException("BooleanValue can not be null");
|
||||
@ -137,7 +164,6 @@ public class CellData<T> extends AbstractCell {
|
||||
throw new IllegalArgumentException("Type can not be null");
|
||||
}
|
||||
this.type = type;
|
||||
this.formula = Boolean.FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,7 +1,9 @@
|
||||
package com.alibaba.excel.metadata.property;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.AbstractMap;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@ -62,7 +64,7 @@ public class ExcelHeadProperty {
|
||||
*/
|
||||
private Map<String, Field> ignoreMap;
|
||||
|
||||
public ExcelHeadProperty(Holder holder, Class headClazz, List<List<String>> head, Boolean convertAllFiled) {
|
||||
public ExcelHeadProperty(Holder holder, Class headClazz, List<List<String>> head, Boolean convertAllField) {
|
||||
this.headClazz = headClazz;
|
||||
headMap = new TreeMap<Integer, Head>();
|
||||
contentPropertyMap = new TreeMap<Integer, ExcelContentProperty>();
|
||||
@ -85,7 +87,7 @@ public class ExcelHeadProperty {
|
||||
headKind = HeadKindEnum.STRING;
|
||||
}
|
||||
// convert headClazz to head
|
||||
initColumnProperties(holder, convertAllFiled);
|
||||
initColumnProperties(holder, convertAllField);
|
||||
|
||||
initHeadRowNumber();
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
@ -113,7 +115,7 @@ public class ExcelHeadProperty {
|
||||
}
|
||||
}
|
||||
|
||||
private void initColumnProperties(Holder holder, Boolean convertAllFiled) {
|
||||
private void initColumnProperties(Holder holder, Boolean convertAllField) {
|
||||
if (headClazz == null) {
|
||||
return;
|
||||
}
|
||||
@ -132,7 +134,6 @@ public class ExcelHeadProperty {
|
||||
for (Map.Entry<Integer, Field> entry : sortedAllFiledMap.entrySet()) {
|
||||
initOneColumnProperty(entry.getKey(), entry.getValue(), indexFiledMap.containsKey(entry.getKey()));
|
||||
}
|
||||
headKind = HeadKindEnum.CLASS;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -0,0 +1,135 @@
|
||||
package com.alibaba.excel.metadata.property;
|
||||
|
||||
import com.alibaba.excel.annotation.write.style.ImagePosition;
|
||||
|
||||
/**
|
||||
* Keep the image position information from an annotation.
|
||||
*
|
||||
* @author Pengliang Zhao
|
||||
*/
|
||||
public class ImagePositionProperty {
|
||||
|
||||
/**
|
||||
* The x coordinate within the first cell.
|
||||
*/
|
||||
private int dx1;
|
||||
|
||||
/**
|
||||
* The y coordinate within the first cell.
|
||||
*/
|
||||
private int dy1;
|
||||
|
||||
/**
|
||||
* The x coordinate within the second cell.
|
||||
*/
|
||||
private int dx2;
|
||||
|
||||
/**
|
||||
* The y coordinate within the second cell
|
||||
*/
|
||||
private int dy2;
|
||||
|
||||
/**
|
||||
* 0-based column of the first cell.
|
||||
*/
|
||||
private short col1;
|
||||
|
||||
/**
|
||||
* 0-based row of the first cell.
|
||||
*/
|
||||
private int row1;
|
||||
|
||||
/**
|
||||
* 0-based column of the second cell.
|
||||
*/
|
||||
private short col2;
|
||||
|
||||
/**
|
||||
* 0-based row of the second cell.
|
||||
*/
|
||||
private int row2;
|
||||
|
||||
public static ImagePositionProperty build(ImagePosition imagePosition) {
|
||||
if (imagePosition == null) {
|
||||
return null;
|
||||
}
|
||||
return new ImagePositionProperty(imagePosition.dx1(), imagePosition.dy1(), imagePosition.dx2(),
|
||||
imagePosition.dy2(), imagePosition.col1(), imagePosition.row1(), imagePosition.col2(),
|
||||
imagePosition.row2());
|
||||
}
|
||||
|
||||
public ImagePositionProperty(int dx1, int dy1, int dx2, int dy2, short col1, int row1, short col2, int row2) {
|
||||
this.dx1 = dx1;
|
||||
this.dy1 = dy1;
|
||||
this.dx2 = dx2;
|
||||
this.dy2 = dy2;
|
||||
this.col1 = col1;
|
||||
this.row1 = row1;
|
||||
this.col2 = col2;
|
||||
this.row2 = row2;
|
||||
}
|
||||
|
||||
public int getDx1() {
|
||||
return dx1;
|
||||
}
|
||||
|
||||
public void setDx1(int dx1) {
|
||||
this.dx1 = dx1;
|
||||
}
|
||||
|
||||
public int getDy1() {
|
||||
return dy1;
|
||||
}
|
||||
|
||||
public void setDy1(int dy1) {
|
||||
this.dy1 = dy1;
|
||||
}
|
||||
|
||||
public int getDx2() {
|
||||
return dx2;
|
||||
}
|
||||
|
||||
public void setDx2(int dx2) {
|
||||
this.dx2 = dx2;
|
||||
}
|
||||
|
||||
public int getDy2() {
|
||||
return dy2;
|
||||
}
|
||||
|
||||
public void setDy2(int dy2) {
|
||||
this.dy2 = dy2;
|
||||
}
|
||||
|
||||
public short getCol1() {
|
||||
return col1;
|
||||
}
|
||||
|
||||
public void setCol1(short col1) {
|
||||
this.col1 = col1;
|
||||
}
|
||||
|
||||
public int getRow1() {
|
||||
return row1;
|
||||
}
|
||||
|
||||
public void setRow1(int row1) {
|
||||
this.row1 = row1;
|
||||
}
|
||||
|
||||
public short getCol2() {
|
||||
return col2;
|
||||
}
|
||||
|
||||
public void setCol2(short col2) {
|
||||
this.col2 = col2;
|
||||
}
|
||||
|
||||
public int getRow2() {
|
||||
return row2;
|
||||
}
|
||||
|
||||
public void setRow2(int row2) {
|
||||
this.row2 = row2;
|
||||
}
|
||||
}
|
@ -81,7 +81,7 @@ public abstract class AbstractExcelWriterParameterBuilder<T extends AbstractExce
|
||||
* Ignore the custom columns.
|
||||
*/
|
||||
public T excludeColumnFiledNames(Collection<String> excludeColumnFiledNames) {
|
||||
parameter().setExcludeColumnFiledNames(excludeColumnFiledNames);
|
||||
parameter().setExcludeColumnFieldNames(excludeColumnFiledNames);
|
||||
return self();
|
||||
}
|
||||
|
||||
@ -97,7 +97,7 @@ public abstract class AbstractExcelWriterParameterBuilder<T extends AbstractExce
|
||||
* Only output the custom columns.
|
||||
*/
|
||||
public T includeColumnFiledNames(Collection<String> includeColumnFiledNames) {
|
||||
parameter().setIncludeColumnFiledNames(includeColumnFiledNames);
|
||||
parameter().setIncludeColumnFieldNames(includeColumnFiledNames);
|
||||
return self();
|
||||
}
|
||||
|
||||
|
@ -139,15 +139,27 @@ public abstract class AbstractExcelWriteExecutor implements ExcelWriteExecutor {
|
||||
}
|
||||
CreationHelper helper = sheet.getWorkbook().getCreationHelper();
|
||||
ClientAnchor anchor = helper.createClientAnchor();
|
||||
anchor.setDx1(0);
|
||||
anchor.setDx2(0);
|
||||
anchor.setDy1(0);
|
||||
anchor.setDy2(0);
|
||||
anchor.setCol1(cell.getColumnIndex());
|
||||
anchor.setCol2(cell.getColumnIndex() + 1);
|
||||
anchor.setRow1(cell.getRowIndex());
|
||||
anchor.setRow2(cell.getRowIndex() + 1);
|
||||
anchor.setAnchorType(ClientAnchor.AnchorType.DONT_MOVE_AND_RESIZE);
|
||||
if(cellData.getUseImagePositionProperty()) {
|
||||
anchor.setDx1(cellData.getImagePositionProperty().getDx1());
|
||||
anchor.setDx2(cellData.getImagePositionProperty().getDx2());
|
||||
anchor.setDy1(cellData.getImagePositionProperty().getDy1());
|
||||
anchor.setDy2(cellData.getImagePositionProperty().getDy2());
|
||||
anchor.setCol1(cellData.getImagePositionProperty().getCol1());
|
||||
anchor.setCol2(cellData.getImagePositionProperty().getCol2());
|
||||
anchor.setRow1(cellData.getImagePositionProperty().getRow1());
|
||||
anchor.setRow2(cellData.getImagePositionProperty().getRow2());
|
||||
anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE);
|
||||
} else {
|
||||
anchor.setDx1(0);
|
||||
anchor.setDx2(0);
|
||||
anchor.setDy1(0);
|
||||
anchor.setDy2(0);
|
||||
anchor.setCol1(cell.getColumnIndex());
|
||||
anchor.setCol2(cell.getColumnIndex() + 1);
|
||||
anchor.setRow1(cell.getRowIndex());
|
||||
anchor.setRow2(cell.getRowIndex() + 1);
|
||||
anchor.setAnchorType(ClientAnchor.AnchorType.DONT_MOVE_AND_RESIZE);
|
||||
}
|
||||
drawing.createPicture(anchor, index);
|
||||
}
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ public class WriteBasicParameter extends BasicParameter {
|
||||
/**
|
||||
* Ignore the custom columns.
|
||||
*/
|
||||
private Collection<String> excludeColumnFiledNames;
|
||||
private Collection<String> excludeColumnFieldNames;
|
||||
/**
|
||||
* Only output the custom columns.
|
||||
*/
|
||||
@ -48,7 +48,7 @@ public class WriteBasicParameter extends BasicParameter {
|
||||
/**
|
||||
* Only output the custom columns.
|
||||
*/
|
||||
private Collection<String> includeColumnFiledNames;
|
||||
private Collection<String> includeColumnFieldNames;
|
||||
|
||||
public Integer getRelativeHeadRowIndex() {
|
||||
return relativeHeadRowIndex;
|
||||
@ -98,12 +98,12 @@ public class WriteBasicParameter extends BasicParameter {
|
||||
this.excludeColumnIndexes = excludeColumnIndexes;
|
||||
}
|
||||
|
||||
public Collection<String> getExcludeColumnFiledNames() {
|
||||
return excludeColumnFiledNames;
|
||||
public Collection<String> getExcludeColumnFieldNames() {
|
||||
return excludeColumnFieldNames;
|
||||
}
|
||||
|
||||
public void setExcludeColumnFiledNames(Collection<String> excludeColumnFiledNames) {
|
||||
this.excludeColumnFiledNames = excludeColumnFiledNames;
|
||||
public void setExcludeColumnFieldNames(Collection<String> excludeColumnFieldNames) {
|
||||
this.excludeColumnFieldNames = excludeColumnFieldNames;
|
||||
}
|
||||
|
||||
public Collection<Integer> getIncludeColumnIndexes() {
|
||||
@ -114,12 +114,12 @@ public class WriteBasicParameter extends BasicParameter {
|
||||
this.includeColumnIndexes = includeColumnIndexes;
|
||||
}
|
||||
|
||||
public Collection<String> getIncludeColumnFiledNames() {
|
||||
return includeColumnFiledNames;
|
||||
public Collection<String> getIncludeColumnFieldNames() {
|
||||
return includeColumnFieldNames;
|
||||
}
|
||||
|
||||
public void setIncludeColumnFiledNames(Collection<String> includeColumnFiledNames) {
|
||||
this.includeColumnFiledNames = includeColumnFiledNames;
|
||||
public void setIncludeColumnFieldNames(Collection<String> includeColumnFieldNames) {
|
||||
this.includeColumnFieldNames = includeColumnFieldNames;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -87,7 +87,7 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
|
||||
/**
|
||||
* Ignore the custom columns.
|
||||
*/
|
||||
private Collection<String> excludeColumnFiledNames;
|
||||
private Collection<String> excludeColumnFieldNames;
|
||||
/**
|
||||
* Only output the custom columns.
|
||||
*/
|
||||
@ -95,10 +95,10 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
|
||||
/**
|
||||
* Only output the custom columns.
|
||||
*/
|
||||
private Collection<String> includeColumnFiledNames;
|
||||
private Collection<String> includeColumnFieldNames;
|
||||
|
||||
public AbstractWriteHolder(WriteBasicParameter writeBasicParameter, AbstractWriteHolder parentAbstractWriteHolder,
|
||||
Boolean convertAllFiled) {
|
||||
Boolean convertAllField) {
|
||||
super(writeBasicParameter, parentAbstractWriteHolder);
|
||||
if (writeBasicParameter.getUse1904windowing() == null) {
|
||||
if (parentAbstractWriteHolder == null) {
|
||||
@ -155,20 +155,20 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
|
||||
this.automaticMergeHead = writeBasicParameter.getAutomaticMergeHead();
|
||||
}
|
||||
|
||||
if (writeBasicParameter.getExcludeColumnFiledNames() == null && parentAbstractWriteHolder != null) {
|
||||
this.excludeColumnFiledNames = parentAbstractWriteHolder.getExcludeColumnFiledNames();
|
||||
if (writeBasicParameter.getExcludeColumnFieldNames() == null && parentAbstractWriteHolder != null) {
|
||||
this.excludeColumnFieldNames = parentAbstractWriteHolder.getExcludeColumnFieldNames();
|
||||
} else {
|
||||
this.excludeColumnFiledNames = writeBasicParameter.getExcludeColumnFiledNames();
|
||||
this.excludeColumnFieldNames = writeBasicParameter.getExcludeColumnFieldNames();
|
||||
}
|
||||
if (writeBasicParameter.getExcludeColumnIndexes() == null && parentAbstractWriteHolder != null) {
|
||||
this.excludeColumnIndexes = parentAbstractWriteHolder.getExcludeColumnIndexes();
|
||||
} else {
|
||||
this.excludeColumnIndexes = writeBasicParameter.getExcludeColumnIndexes();
|
||||
}
|
||||
if (writeBasicParameter.getIncludeColumnFiledNames() == null && parentAbstractWriteHolder != null) {
|
||||
this.includeColumnFiledNames = parentAbstractWriteHolder.getIncludeColumnFiledNames();
|
||||
if (writeBasicParameter.getIncludeColumnFieldNames() == null && parentAbstractWriteHolder != null) {
|
||||
this.includeColumnFieldNames = parentAbstractWriteHolder.getIncludeColumnFieldNames();
|
||||
} else {
|
||||
this.includeColumnFiledNames = writeBasicParameter.getIncludeColumnFiledNames();
|
||||
this.includeColumnFieldNames = writeBasicParameter.getIncludeColumnFieldNames();
|
||||
}
|
||||
if (writeBasicParameter.getIncludeColumnIndexes() == null && parentAbstractWriteHolder != null) {
|
||||
this.includeColumnIndexes = parentAbstractWriteHolder.getIncludeColumnIndexes();
|
||||
@ -177,7 +177,7 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
|
||||
}
|
||||
|
||||
// Initialization property
|
||||
this.excelWriteHeadProperty = new ExcelWriteHeadProperty(this, getClazz(), getHead(), convertAllFiled);
|
||||
this.excelWriteHeadProperty = new ExcelWriteHeadProperty(this, getClazz(), getHead(), convertAllField);
|
||||
|
||||
// Compatible with old code
|
||||
compatibleOldCode(writeBasicParameter);
|
||||
@ -462,10 +462,10 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
|
||||
@Override
|
||||
public boolean ignore(String fieldName, Integer columnIndex) {
|
||||
if (fieldName != null) {
|
||||
if (includeColumnFiledNames != null && !includeColumnFiledNames.contains(fieldName)) {
|
||||
if (includeColumnFieldNames != null && !includeColumnFieldNames.contains(fieldName)) {
|
||||
return true;
|
||||
}
|
||||
if (excludeColumnFiledNames != null && excludeColumnFiledNames.contains(fieldName)) {
|
||||
if (excludeColumnFieldNames != null && excludeColumnFieldNames.contains(fieldName)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -545,12 +545,12 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
|
||||
this.excludeColumnIndexes = excludeColumnIndexes;
|
||||
}
|
||||
|
||||
public Collection<String> getExcludeColumnFiledNames() {
|
||||
return excludeColumnFiledNames;
|
||||
public Collection<String> getExcludeColumnFieldNames() {
|
||||
return excludeColumnFieldNames;
|
||||
}
|
||||
|
||||
public void setExcludeColumnFiledNames(Collection<String> excludeColumnFiledNames) {
|
||||
this.excludeColumnFiledNames = excludeColumnFiledNames;
|
||||
public void setExcludeColumnFieldNames(Collection<String> excludeColumnFieldNames) {
|
||||
this.excludeColumnFieldNames = excludeColumnFieldNames;
|
||||
}
|
||||
|
||||
public Collection<Integer> getIncludeColumnIndexes() {
|
||||
@ -561,12 +561,12 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
|
||||
this.includeColumnIndexes = includeColumnIndexes;
|
||||
}
|
||||
|
||||
public Collection<String> getIncludeColumnFiledNames() {
|
||||
return includeColumnFiledNames;
|
||||
public Collection<String> getIncludeColumnFieldNames() {
|
||||
return includeColumnFieldNames;
|
||||
}
|
||||
|
||||
public void setIncludeColumnFiledNames(Collection<String> includeColumnFiledNames) {
|
||||
this.includeColumnFiledNames = includeColumnFiledNames;
|
||||
public void setIncludeColumnFieldNames(Collection<String> includeColumnFieldNames) {
|
||||
this.includeColumnFieldNames = includeColumnFieldNames;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -0,0 +1,42 @@
|
||||
package com.alibaba.easyexcel.test.demo.write;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
|
||||
import com.alibaba.excel.annotation.write.style.ImagePosition;
|
||||
import com.alibaba.excel.converters.string.StringImageConverter;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 图片导出类
|
||||
*
|
||||
*/
|
||||
@Data
|
||||
@ContentRowHeight(100)
|
||||
@ColumnWidth(100 / 8)
|
||||
public class ImageDataWithAnnotation {
|
||||
@ImagePosition(dx1 = 0, dy1 = 0, dx2 = 0, dy2 = 0, col1 = 0, row1 = 3, col2 = 1, row2 = 4)
|
||||
private File file;
|
||||
@ImagePosition(dx1 = 0, dy1 = 0, dx2 = 0, dy2 = 0, col1 = 0, row1 = 1, col2 = 2, row2 = 2)
|
||||
private InputStream inputStream;
|
||||
/**
|
||||
* 如果string类型 必须指定转换器,string默认转换成string
|
||||
*/
|
||||
@ExcelProperty(converter = StringImageConverter.class)
|
||||
@ImagePosition(dx1 = 0, dy1 = 0, dx2 = 0, dy2 = 0, col1 = 2, row1 = 1, col2 = 3, row2 = 3)
|
||||
private String string;
|
||||
@ImagePosition(dx1 = 0, dy1 = 0, dx2 = 0, dy2 = 0, col1 = 3, row1 = 1, col2 = 4, row2 = 5)
|
||||
private byte[] byteArray;
|
||||
/**
|
||||
* 根据url导出
|
||||
*
|
||||
* @since 2.1.1
|
||||
*/
|
||||
@ImagePosition(dx1 = 0, dy1 = 0, dx2 = 0, dy2 = 0, col1 = 4, row1 = 1, col2 = 5, row2 = 2)
|
||||
private URL url;
|
||||
}
|
@ -248,7 +248,7 @@ public class WriteTest {
|
||||
inputStream = FileUtils.openInputStream(new File(imagePath));
|
||||
imageData.setInputStream(inputStream);
|
||||
imageData.setUrl(new URL(
|
||||
"https://raw.githubusercontent.com/alibaba/easyexcel/master/src/test/resources/converter/img.jpg"));
|
||||
"https://raw.githubusercontent.com/alibaba/easyexcel/master/src/test/resources/converter/img.jpg"));
|
||||
EasyExcel.write(fileName, ImageData.class).sheet().doWrite(list);
|
||||
} finally {
|
||||
if (inputStream != null) {
|
||||
@ -257,6 +257,39 @@ public class WriteTest {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 使用注解设置图片位置,然后导出
|
||||
* <p>
|
||||
* 1. 创建excel对应的实体对象 参照{@link ImageData}
|
||||
* <p>
|
||||
* 2. 直接写即可
|
||||
*/
|
||||
@Test
|
||||
public void imageWriteWithAnnotation() throws Exception {
|
||||
String fileName = TestFileUtil.getPath() + "imageWriteWithAnnotation" + System.currentTimeMillis() + ".xlsx";
|
||||
// 如果使用流 记得关闭
|
||||
InputStream inputStream = null;
|
||||
try {
|
||||
List<ImageDataWithAnnotation> list = new ArrayList<ImageDataWithAnnotation>();
|
||||
ImageDataWithAnnotation imageData = new ImageDataWithAnnotation();
|
||||
list.add(imageData);
|
||||
String imagePath = TestFileUtil.getPath() + "converter" + File.separator + "img.jpg";
|
||||
// 放入五种类型的图片 实际使用只要选一种即可
|
||||
imageData.setByteArray(FileUtils.readFileToByteArray(new File(imagePath)));
|
||||
imageData.setFile(new File(imagePath));
|
||||
imageData.setString(imagePath);
|
||||
inputStream = FileUtils.openInputStream(new File(imagePath));
|
||||
imageData.setInputStream(inputStream);
|
||||
imageData.setUrl(new URL(
|
||||
"https://raw.githubusercontent.com/alibaba/easyexcel/master/src/test/resources/converter/img.jpg"));
|
||||
EasyExcel.write(fileName, ImageDataWithAnnotation.class).sheet().doWrite(list);
|
||||
} finally {
|
||||
if (inputStream != null) {
|
||||
inputStream.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据模板写入
|
||||
* <p>
|
||||
|
Loading…
x
Reference in New Issue
Block a user