ExcelWriter.java 7.6 KB
Newer Older
J
update  
jipengfei.jpf 已提交
1 2
package com.alibaba.excel;

clevertension's avatar
clevertension 已提交
3 4 5 6 7 8 9 10 11 12 13 14 15
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

import com.alibaba.excel.converters.BooleanConverter;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.converters.ConverterRegistryCenter;
import com.alibaba.excel.converters.DateConverter;
import com.alibaba.excel.converters.DoubleConverter;
import com.alibaba.excel.converters.FloatConverter;
import com.alibaba.excel.converters.IntegerConverter;
import com.alibaba.excel.converters.LongConverter;
import com.alibaba.excel.converters.StringConverter;
16
import com.alibaba.excel.event.WriteHandler;
J
update  
jipengfei.jpf 已提交
17 18 19
import com.alibaba.excel.metadata.BaseRowModel;
import com.alibaba.excel.metadata.Sheet;
import com.alibaba.excel.metadata.Table;
20
import com.alibaba.excel.parameter.GenerateParam;
J
update  
jipengfei.jpf 已提交
21 22 23
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.ExcelBuilder;
import com.alibaba.excel.write.ExcelBuilderImpl;
Z
zhuangjiaju 已提交
24
import com.alibaba.excel.write.merge.MergeStrategy;
25

J
update  
jipengfei.jpf 已提交
26
/**
clevertension's avatar
clevertension 已提交
27 28 29
 * Excel Writer This tool is used to write value out to Excel via POI. This object can perform the
 * following two functions.
 * 
30
 * <pre>
clevertension's avatar
clevertension 已提交
31
 *    1. Create a new empty Excel workbook, write the value to the stream after the value is filled.
32
 *    2. Edit existing Excel, write the original Excel file, or write it to other places.}
33
 * </pre>
clevertension's avatar
clevertension 已提交
34
 * 
J
update  
jipengfei.jpf 已提交
35 36 37 38 39 40 41
 * @author jipengfei
 */
public class ExcelWriter {

    private ExcelBuilder excelBuilder;

    /**
42
     * Create new writer
clevertension's avatar
clevertension 已提交
43 44
     * 
     * @param outputStream the java OutputStream you wish to write the value to
45
     * @param typeEnum 03 or 07
J
update  
jipengfei.jpf 已提交
46 47 48 49 50
     */
    public ExcelWriter(OutputStream outputStream, ExcelTypeEnum typeEnum) {
        this(outputStream, typeEnum, true);
    }

51
    @Deprecated
52 53
    private Class<? extends BaseRowModel> objectClass;

54 55 56 57
    /**
     * @param generateParam
     */
    @Deprecated
58
    public ExcelWriter(GenerateParam generateParam) {
clevertension's avatar
clevertension 已提交
59
        this(generateParam.getOutputStream(), generateParam.getType(), generateParam.isNeedHead());
60 61 62
        this.objectClass = generateParam.getClazz();
    }

J
update  
jipengfei.jpf 已提交
63 64
    /**
     *
65
     * Create new writer
clevertension's avatar
clevertension 已提交
66 67
     * 
     * @param outputStream the java OutputStream you wish to write the value to
68 69
     * @param typeEnum 03 or 07
     * @param needHead Do you need to write the header to the file?
J
update  
jipengfei.jpf 已提交
70 71
     */
    public ExcelWriter(OutputStream outputStream, ExcelTypeEnum typeEnum, boolean needHead) {
clevertension's avatar
clevertension 已提交
72
        this(null, outputStream, typeEnum, needHead, null, null);
J
update  
jipengfei.jpf 已提交
73 74 75
    }

    /**
clevertension's avatar
clevertension 已提交
76 77 78 79 80
     * Create new writer
     * 
     * @param templateInputStream Append value after a POI file ,Can be null(the template POI
     *        filesystem that contains the Workbook stream)
     * @param outputStream the java OutputStream you wish to write the value to
81
     * @param typeEnum 03 or 07
82
     */
clevertension's avatar
clevertension 已提交
83 84 85
    public ExcelWriter(InputStream templateInputStream, OutputStream outputStream, ExcelTypeEnum typeEnum,
                    Boolean needHead) {
        this(templateInputStream, outputStream, typeEnum, needHead, null, null);
86 87
    }

88

89
    /**
clevertension's avatar
clevertension 已提交
90 91 92 93 94
     * Create new writer
     * 
     * @param templateInputStream Append value after a POI file ,Can be null(the template POI
     *        filesystem that contains the Workbook stream)
     * @param outputStream the java OutputStream you wish to write the value to
95 96 97
     * @param typeEnum 03 or 07
     * @param writeHandler User-defined callback
     */
clevertension's avatar
clevertension 已提交
98 99 100
    public ExcelWriter(InputStream templateInputStream, OutputStream outputStream, ExcelTypeEnum typeEnum,
                    Boolean needHead, WriteHandler writeHandler) {
        this(templateInputStream, outputStream, typeEnum, needHead, writeHandler, null);
101 102
    }

clevertension's avatar
clevertension 已提交
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
    public ExcelWriter(InputStream templateInputStream, OutputStream outputStream, ExcelTypeEnum typeEnum,
                    Boolean needHead, WriteHandler writeHandler, List<Converter> converters) {
        excelBuilder = new ExcelBuilderImpl(templateInputStream, outputStream, typeEnum, needHead, writeHandler,
                        converters);
        if (this.excelBuilder instanceof ConverterRegistryCenter) {
            ConverterRegistryCenter registryCenter = (ConverterRegistryCenter)this.excelBuilder;
            initConverters(registryCenter, converters);
        }
    }

    private void initConverters(ConverterRegistryCenter registryCenter, List<Converter> converters) {
        registerDefaultConverters(registryCenter);
        if (converters != null && converters.size() > 0) {
            for (Converter c : converters) {
                registryCenter.register(c);
            }
        }
    }
    private void registerDefaultConverters(ConverterRegistryCenter registryCenter) {
        registryCenter.register(new StringConverter());
        registryCenter.register(new DateConverter(null));
        registryCenter.register(new IntegerConverter());
        registryCenter.register(new DoubleConverter());
        registryCenter.register(new LongConverter());
        registryCenter.register(new FloatConverter());
        registryCenter.register(new BooleanConverter());
    }
130
    /**
clevertension's avatar
clevertension 已提交
131 132
     * Write value to a sheet
     * 
133 134 135
     * @param data Data to be written
     * @param sheet Write to this sheet
     * @return this current writer
J
update  
jipengfei.jpf 已提交
136 137 138 139 140 141
     */
    public ExcelWriter write(List<? extends BaseRowModel> data, Sheet sheet) {
        excelBuilder.addContent(data, sheet);
        return this;
    }

142

143
    /**
clevertension's avatar
clevertension 已提交
144 145
     * Write value to a sheet
     * 
146 147 148
     * @param data Data to be written
     * @return this current writer
     */
149 150 151
    @Deprecated
    public ExcelWriter write(List data) {
        if (objectClass != null) {
clevertension's avatar
clevertension 已提交
152 153 154
            return this.write(data, new Sheet(1, 0, objectClass));
        } else {
            return this.write0(data, new Sheet(1, 0, objectClass));
155 156 157 158

        }
    }

J
update  
jipengfei.jpf 已提交
159 160
    /**
     *
clevertension's avatar
clevertension 已提交
161 162
     * Write value to a sheet
     * 
163 164
     * @param data Data to be written
     * @param sheet Write to this sheet
165
     * @return this
J
update  
jipengfei.jpf 已提交
166
     */
167
    public ExcelWriter write1(List<List<Object>> data, Sheet sheet) {
J
update  
jipengfei.jpf 已提交
168 169 170 171 172
        excelBuilder.addContent(data, sheet);
        return this;
    }

    /**
clevertension's avatar
clevertension 已提交
173 174 175
     * Write value to a sheet
     * 
     * @param data Data to be written
176
     * @param sheet Write to this sheet
177
     * @return this
J
update  
jipengfei.jpf 已提交
178
     */
179 180 181 182 183
    public ExcelWriter write0(List<List<String>> data, Sheet sheet) {
        excelBuilder.addContent(data, sheet);
        return this;
    }

184
    /**
clevertension's avatar
clevertension 已提交
185 186 187
     * Write value to a sheet
     * 
     * @param data Data to be written
188 189 190 191
     * @param sheet Write to this sheet
     * @param table Write to this table
     * @return this
     */
J
update  
jipengfei.jpf 已提交
192 193 194 195 196
    public ExcelWriter write(List<? extends BaseRowModel> data, Sheet sheet, Table table) {
        excelBuilder.addContent(data, sheet, table);
        return this;
    }

197
    /**
clevertension's avatar
clevertension 已提交
198 199 200
     * Write value to a sheet
     * 
     * @param data Data to be written
201 202 203 204
     * @param sheet Write to this sheet
     * @param table Write to this table
     * @return this
     */
J
update  
jipengfei.jpf 已提交
205 206 207 208 209
    public ExcelWriter write0(List<List<String>> data, Sheet sheet, Table table) {
        excelBuilder.addContent(data, sheet, table);
        return this;
    }

210 211 212
    /**
     * Merge Cells,Indexes are zero-based.
     *
clevertension's avatar
clevertension 已提交
213
     * @param strategies the merge strategies.
214
     */
clevertension's avatar
clevertension 已提交
215 216
    public ExcelWriter merge(List<MergeStrategy> strategies) {
        excelBuilder.merge(strategies);
217 218
        return this;
    }
219

220
    /**
clevertension's avatar
clevertension 已提交
221 222 223
     * Write value to a sheet
     * 
     * @param data Data to be written
224 225 226 227
     * @param sheet Write to this sheet
     * @param table Write to this table
     * @return
     */
228 229 230 231 232
    public ExcelWriter write1(List<List<Object>> data, Sheet sheet, Table table) {
        excelBuilder.addContent(data, sheet, table);
        return this;
    }

233 234 235
    /**
     * Close IO
     */
J
update  
jipengfei.jpf 已提交
236 237 238 239
    public void finish() {
        excelBuilder.finish();
    }
}