forked from github/easyexcel
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
240 lines
9.0 KiB
240 lines
9.0 KiB
package com.alibaba.easyexcel.test; |
|
|
|
import static com.alibaba.easyexcel.test.util.DataUtil.createTableStyle; |
|
import static com.alibaba.easyexcel.test.util.DataUtil.createTestListJavaMode; |
|
import static com.alibaba.easyexcel.test.util.DataUtil.createTestListObject; |
|
import static com.alibaba.easyexcel.test.util.DataUtil.createTestListStringHead; |
|
|
|
import java.io.File; |
|
import java.io.FileOutputStream; |
|
import java.io.IOException; |
|
import java.io.InputStream; |
|
import java.io.OutputStream; |
|
import java.util.ArrayList; |
|
import java.util.HashMap; |
|
import java.util.List; |
|
import java.util.Map; |
|
|
|
import org.junit.Test; |
|
|
|
import com.alibaba.easyexcel.test.listen.AfterWriteHandlerImpl; |
|
import com.alibaba.easyexcel.test.model.WriteModel; |
|
import com.alibaba.easyexcel.test.util.FileUtil; |
|
import com.alibaba.excel.EasyExcelFactory; |
|
import com.alibaba.excel.ExcelWriter; |
|
import com.alibaba.excel.metadata.Sheet; |
|
import com.alibaba.excel.metadata.Table; |
|
import com.alibaba.excel.support.ExcelTypeEnum; |
|
import com.alibaba.excel.write.MergeStrategy; |
|
|
|
public class WriteTest { |
|
|
|
@Test |
|
public void writeV2007() throws IOException { |
|
OutputStream out = new FileOutputStream(new File(FileUtil.getPath(), "write_2007.xlsx")); |
|
ExcelWriter writer = EasyExcelFactory.getWriter(out); |
|
// 写第一个sheet, sheet1 数据全是List<String> 无模型映射关系 |
|
Sheet sheet1 = new Sheet(1, 3); |
|
sheet1.setSheetName("第一个sheet"); |
|
|
|
// 设置列宽 设置每列的宽度 |
|
Map columnWidth = new HashMap(); |
|
columnWidth.put(0, 10000); |
|
columnWidth.put(1, 40000); |
|
columnWidth.put(2, 10000); |
|
columnWidth.put(3, 10000); |
|
sheet1.setColumnWidthMap(columnWidth); |
|
sheet1.setHead(createTestListStringHead()); |
|
// or 设置自适应宽度 |
|
// sheet1.setAutoWidth(Boolean.TRUE); |
|
writer.write1(createTestListObject(), sheet1); |
|
|
|
// 写第二个sheet sheet2 模型上打有表头的注解,合并单元格 |
|
Sheet sheet2 = new Sheet(2, 3, WriteModel.class, "第二个sheet", null); |
|
sheet2.setTableStyle(createTableStyle()); |
|
// writer.write1(null, sheet2); |
|
writer.write(createTestListJavaMode(), sheet2); |
|
List<MergeStrategy> strategies = new ArrayList<MergeStrategy>(); |
|
strategies.add(new MergeStrategy() { |
|
@Override |
|
public int getFirstRow() { |
|
return 5; |
|
} |
|
|
|
@Override |
|
public int getLastRow() { |
|
return 20; |
|
} |
|
|
|
@Override |
|
public int getFirstCol() { |
|
return 1; |
|
} |
|
|
|
@Override |
|
public int getLastCol() { |
|
return 1; |
|
} |
|
|
|
}); |
|
// 需要合并单元格 |
|
writer.merge(strategies); |
|
|
|
// 写第三个sheet包含多个table情况 |
|
Sheet sheet3 = new Sheet(3, 0); |
|
sheet3.setSheetName("第三个sheet"); |
|
Table table1 = new Table(1); |
|
table1.setHead(createTestListStringHead()); |
|
writer.write1(createTestListObject(), sheet3, table1); |
|
|
|
// 写sheet2 模型上打有表头的注解 |
|
Table table2 = new Table(2); |
|
table2.setTableStyle(createTableStyle()); |
|
table2.setClazz(WriteModel.class); |
|
writer.write(createTestListJavaMode(), sheet3, table2); |
|
|
|
writer.finish(); |
|
out.close(); |
|
|
|
} |
|
|
|
|
|
@Test |
|
public void writeV2007WithTemplate() throws IOException { |
|
InputStream inputStream = FileUtil.getResourcesFileInputStream("temp.xlsx"); |
|
OutputStream out = new FileOutputStream(new File(FileUtil.getPath(), "write_2007_1.xlsx")); |
|
ExcelWriter writer = EasyExcelFactory.getWriterWithTemp(inputStream, out, ExcelTypeEnum.XLSX, true); |
|
// 写第一个sheet, sheet1 数据全是List<String> 无模型映射关系 |
|
Sheet sheet1 = new Sheet(1, 3); |
|
sheet1.setSheetName("第一个sheet"); |
|
sheet1.setStartRow(20); |
|
|
|
// 设置列宽 设置每列的宽度 |
|
Map columnWidth = new HashMap(); |
|
columnWidth.put(0, 10000); |
|
columnWidth.put(1, 40000); |
|
columnWidth.put(2, 10000); |
|
columnWidth.put(3, 10000); |
|
sheet1.setColumnWidthMap(columnWidth); |
|
sheet1.setHead(createTestListStringHead()); |
|
// or 设置自适应宽度 |
|
// sheet1.setAutoWidth(Boolean.TRUE); |
|
writer.write1(createTestListObject(), sheet1); |
|
|
|
// 写第二个sheet sheet2 模型上打有表头的注解,合并单元格 |
|
Sheet sheet2 = new Sheet(2, 3, WriteModel.class, "第二个sheet", null); |
|
sheet2.setTableStyle(createTableStyle()); |
|
sheet2.setStartRow(20); |
|
writer.write(createTestListJavaMode(), sheet2); |
|
|
|
// 写第三个sheet包含多个table情况 |
|
Sheet sheet3 = new Sheet(3, 0); |
|
sheet3.setSheetName("第三个sheet"); |
|
sheet3.setStartRow(30); |
|
Table table1 = new Table(1); |
|
table1.setHead(createTestListStringHead()); |
|
writer.write1(createTestListObject(), sheet3, table1); |
|
|
|
// 写sheet2 模型上打有表头的注解 |
|
Table table2 = new Table(2); |
|
table2.setTableStyle(createTableStyle()); |
|
table2.setClazz(WriteModel.class); |
|
writer.write(createTestListJavaMode(), sheet3, table2); |
|
|
|
writer.finish(); |
|
out.close(); |
|
|
|
} |
|
|
|
@Test |
|
public void writeV2007WithTemplateAndHandler() throws IOException { |
|
InputStream inputStream = FileUtil.getResourcesFileInputStream("temp.xlsx"); |
|
OutputStream out = new FileOutputStream(new File(FileUtil.getPath(), "write_2007_2.xlsx")); |
|
ExcelWriter writer = EasyExcelFactory.getWriterWithTempAndHandler(inputStream, out, ExcelTypeEnum.XLSX, true, |
|
new AfterWriteHandlerImpl()); |
|
// 写第一个sheet, sheet1 数据全是List<String> 无模型映射关系 |
|
Sheet sheet1 = new Sheet(1, 3); |
|
sheet1.setSheetName("第一个sheet"); |
|
sheet1.setStartRow(20); |
|
|
|
// 设置列宽 设置每列的宽度 |
|
Map columnWidth = new HashMap(); |
|
columnWidth.put(0, 10000); |
|
columnWidth.put(1, 40000); |
|
columnWidth.put(2, 10000); |
|
columnWidth.put(3, 10000); |
|
sheet1.setColumnWidthMap(columnWidth); |
|
sheet1.setHead(createTestListStringHead()); |
|
// or 设置自适应宽度 |
|
// sheet1.setAutoWidth(Boolean.TRUE); |
|
writer.write1(createTestListObject(), sheet1); |
|
|
|
// 写第二个sheet sheet2 模型上打有表头的注解,合并单元格 |
|
Sheet sheet2 = new Sheet(2, 3, WriteModel.class, "第二个sheet", null); |
|
sheet2.setTableStyle(createTableStyle()); |
|
sheet2.setStartRow(20); |
|
writer.write(createTestListJavaMode(), sheet2); |
|
|
|
// 写第三个sheet包含多个table情况 |
|
Sheet sheet3 = new Sheet(3, 0); |
|
sheet3.setSheetName("第三个sheet"); |
|
sheet3.setStartRow(30); |
|
Table table1 = new Table(1); |
|
table1.setHead(createTestListStringHead()); |
|
writer.write1(createTestListObject(), sheet3, table1); |
|
|
|
// 写sheet2 模型上打有表头的注解 |
|
Table table2 = new Table(2); |
|
table2.setTableStyle(createTableStyle()); |
|
table2.setClazz(WriteModel.class); |
|
writer.write(createTestListJavaMode(), sheet3, table2); |
|
|
|
writer.finish(); |
|
out.close(); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
public void writeV2003() throws IOException { |
|
OutputStream out = new FileOutputStream(new File(FileUtil.getPath(), "write_2003.xlsx")); |
|
ExcelWriter writer = EasyExcelFactory.getWriter(out, ExcelTypeEnum.XLS, true); |
|
// 写第一个sheet, sheet1 数据全是List<String> 无模型映射关系 |
|
Sheet sheet1 = new Sheet(1, 3); |
|
sheet1.setSheetName("第一个sheet"); |
|
|
|
// 设置列宽 设置每列的宽度 |
|
Map columnWidth = new HashMap(); |
|
columnWidth.put(0, 10000); |
|
columnWidth.put(1, 40000); |
|
columnWidth.put(2, 10000); |
|
columnWidth.put(3, 10000); |
|
sheet1.setColumnWidthMap(columnWidth); |
|
sheet1.setHead(createTestListStringHead()); |
|
// or 设置自适应宽度 |
|
// sheet1.setAutoWidth(Boolean.TRUE); |
|
writer.write1(createTestListObject(), sheet1); |
|
|
|
// 写第二个sheet sheet2 模型上打有表头的注解,合并单元格 |
|
Sheet sheet2 = new Sheet(2, 3, WriteModel.class, "第二个sheet", null); |
|
sheet2.setTableStyle(createTableStyle()); |
|
writer.write(createTestListJavaMode(), sheet2); |
|
|
|
// 写第三个sheet包含多个table情况 |
|
Sheet sheet3 = new Sheet(3, 0); |
|
sheet3.setSheetName("第三个sheet"); |
|
Table table1 = new Table(1); |
|
table1.setHead(createTestListStringHead()); |
|
writer.write1(createTestListObject(), sheet3, table1); |
|
|
|
// 写sheet2 模型上打有表头的注解 |
|
Table table2 = new Table(2); |
|
table2.setTableStyle(createTableStyle()); |
|
table2.setClazz(WriteModel.class); |
|
writer.write(createTestListJavaMode(), sheet3, table2); |
|
|
|
writer.finish(); |
|
out.close(); |
|
} |
|
}
|
|
|