java ?????? excel ???????????????java ????????? excel ??????OOM(????????????) exce

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java ?????? excel ???????????????java ????????? excel ??????OOM(????????????) exce相关的知识,希望对你有一定的参考价值。

?????????iba   ??????   ble   target   ??????   reads   ????????????   mail   ??????   

????????????

????????????????????????????????????????????????????????? EXCEL ?????????

????????????

?????? excel ???????????????????????????????????????

???????????????????????????????????? poi ???????????????????????? excel ?????????

???????????? & ????????????

  • ????????????

??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

  • ????????????

????????????????????????????????????????????????????????????

???????????????????????????????????????????????????????????????????????????????????????????????????????????????

????????????

??????????????????????????????????????? MQ ???????????????????????????

MQ ?????????????????????????????? excel ??????????????????????????????????????? FTP ?????????????????????

??????????????????????????????????????????????????????????????? FTP ???????????????????????????????????????

EXCEL ???????????????????????????

OOM

????????? poi ????????????????????? excel ????????????????????????????????????

????????????????????????????????????

??????????????? SXSSF (Since POI 3.8 beta3) ???????????????

???????????????????????????

  1. easypoi ExcelBatchExportServer

  2. hutool BigExcelWriter

???????????????????????? xssf ?????????Excel???

?????????????????? easyexcel??????????????????????????????????????????????????????????????????????????????????????????

????????????????????? hutool BigExcelWriter???
???????????????????????????

FULL GC

?????????????????? 100W ?????????????????????????????????????????????????????????????????????????????????

?????????2??????

  1. ????????????????????????????????????????????????????????? 1w ???????????? 100 ????????????(??????)

  2. ???????????????????????????????????????????????? 10W ????????????????????????????????????

??????????????????????????????????????? 3 ????????????????????????????????????????????????????????????(?????????????????????????????????)

???????????? FULL-GC ??????????????????????????????????????????????????? excel ?????????????????????????????????100W ?????????????????? FULL-GC???

??????????????????

???????????????????????????????????????????????????????????????????????????????????????

??????????????????????????????????????????????????????

?????? 100W ????????????????????? 100 ????????????????????????

????????????

????????? excel ?????????????????????????????????????????? HTTP ????????????????????? 100W ???????????????????????????

???????????????????????????????????????????????????????????????????????????

???????????????????????????????????????????????????????????????????????????????????????????????????????????????

??????????????????

???????????????????????????????????? Hutool??????????????????????????????????????????????????????

?????????????????????????????? easypoi/easyexcel ????????????????????????????????????

?????????????????????????????????

IExcel ??????????????? excel ??????

??????

  • OO ??????????????? excel??????????????????????????????

  • sax ???????????????SXSS ????????????????????? excel ????????? OOM???

  • ????????????????????????????????????

  • ???????????????????????????????????????????????? Map??????????????????????????????

  • ?????????????????????????????????????????????????????????

????????????

  • ?????????????????????

  • excel ???????????????????????????

????????????

???????????????????????????apache poi ?????? excel ???????????????

?????????????????????????????????????????????

  • easypoi

  • easyexcel

  • hutool-poi

???????????????????????????????????????????????????????????????????????????????????? excel ??????????????????

????????????

?????? Jar

?????? maven ?????????

<dependency>
     <groupId>com.github.houbb</groupId>
     <artifactId>iexcel</artifactId>
     <version>0.0.2</version>
</dependency>

????????????

????????????????????? ExcelUtilTest.java

????????????????????????/????????? excel ?????????

  • ExcelFieldModel.java

??????????????? @ExcelField ??????????????????????????????????????????@ExcelField

public class ExcelFieldModel {

    @ExcelField
    private String name;

    @ExcelField(headName = "??????")
    private String age;

    @ExcelField(mapKey = "EMAIL", writeRequire = false, readRequire = false)
    private String email;

    @ExcelField(mapKey = "ADDRESS", headName = "??????", writeRequire = true)
    private String address;

    //getter and setter
}

????????????

IExcelWriter ?????????

IExcelWriter ???????????????????????????????????? new ???????????? ExcelUtil ???????????????

IExcelWriter ????????? ExcelUtil ???????????? ??????
HSSFExcelWriter ExcelUtil.get03ExcelWriter() 2003 ????????? excel
XSSFExcelWriter ExcelUtil.get07ExcelWriter() 2007 ????????? excel
SXSSFExcelWriter ExcelUtil.getBigExcelWriter() ????????? excel????????? OOM

IExcelWriter ????????????

????????? 2003

  • excelWriter03Test()

??????????????????????????? 2003 excel ??????????????????

/**
 * ????????? 03 excel ??????
 */
@Test
public void excelWriter03Test() {
    // ???????????? excel ????????????
    final String filePath = "excelWriter03.xls";

    // ????????????
    List<ExcelFieldModel> models = buildModelList();

    try(IExcelWriter excelWriter = ExcelUtil.get03ExcelWriter();
        OutputStream outputStream = new FileOutputStream(filePath)) {
        // ??????????????????????????????????????????
        excelWriter.write(models);

        // ????????????????????????????????? excel ??????
        excelWriter.flush(outputStream);
    } catch (IOException e) {
        throw new ExcelRuntimeException(e);
    }
}
  • buildModelList()
/**
 * ???????????????????????????
 * @return ????????????
 */
private List<ExcelFieldModel> buildModelList() {
    List<ExcelFieldModel> models = new ArrayList<>();
    ExcelFieldModel model = new ExcelFieldModel();
    model.setName("??????1???");
    model.setAge("25");
    model.setEmail("[email protected]");
    model.setAddress("?????????23???");

    ExcelFieldModel modelTwo = new ExcelFieldModel();
    modelTwo.setName("??????2???");
    modelTwo.setAge("30");
    modelTwo.setEmail("[email protected]");
    modelTwo.setAddress("?????????26???");

    models.add(model);
    models.add(modelTwo);
    return models;
}

?????????????????? 2007 excel

???????????????????????????????????????????????????????????????????????????

/**
 * ?????????????????????
 * ???????????????????????????????????????
 */
@Test
public void onceWriterAndFlush07Test() {
    // ???????????? excel ????????????
    final String filePath = "onceWriterAndFlush07.xlsx";

    // ????????????
    List<ExcelFieldModel> models = buildModelList();

    // ????????? excel ????????????
    IExcelWriter excelWriter = ExcelUtil.get07ExcelWriter();

    // ?????????????????????
    ExcelUtil.onceWriteAndFlush(excelWriter, models, filePath);
}

????????????

excel ?????????????????????????????????????????????????????? excel???

IExcelReader ?????????

IExcelReader ???????????????????????????????????? new ???????????? ExcelUtil ???????????????

IExcelReader ????????? ExcelUtil ???????????? ??????
ExcelReader ExcelUtil.getExcelReader() ???????????? excel ????????????
Sax03ExcelReader ExcelUtil.getBigExcelReader() ???????????? 2003 excel ????????????
Sax07ExcelReader ExcelUtil.getBigExcelReader() ???????????? 2007 excel ????????????

IExcelReader ????????????

excel ???????????????

/**
 * ????????????
 */
@Test
public void readWriterTest() {
    File file = new File("excelWriter03.xls");
    IExcelReader<ExcelFieldModel> excelReader = ExcelUtil.getExcelReader(file);
    List<ExcelFieldModel> models = excelReader.readAll(ExcelFieldModel.class);
    System.out.println(models);
}

ExcelField ????????????

@ExcelField ????????????????????????

?????? ?????? ????????? ??????
mapKey String "" ??????????????????????????? map ???,?????? map.key ????????????????????? bean ???????????????????????????????????????????????????
headName String "" excel ??????????????????????????????????????????????????????????????????
writeRequire boolean true excel ?????????????????????????????????
readRequire boolean true excel ???????????????????????????

IExcelWriter ????????????

/**
 * ?????????????????????????????????????????????Workbook??????Sheet????????????????????????<br>
 * <p>
 * data??????????????????????????????
 *  <pre>
 * 1. Bean?????????????????????Bean????????????Bean???????????????????????????????????????????????????Bean?????????????????????data???????????? <br>
 * </pre>
 * @param data ??????
 * @return this
 */
IExcelWriter write(Collection<?> data);

/**
 * ?????????????????????????????????????????????Workbook??????Sheet????????????????????????<br>
 *  ??? map ?????? targetClass ?????????????????????
 *  ????????????: ?????? mybatis mapper ???????????? map ???????????????????????????????????????
 * @param mapList map ??????
 * @param targetClass ????????????
 * @return this
 */
IExcelWriter write(Collection<Map<String, Object>> mapList, final Class<?> targetClass);

/**
 * ???Excel Workbook??????????????????
 *
 * @param outputStream ?????????
 * @return this
 */
IExcelWriter flush(OutputStream outputStream);

?????? sheet

?????? IExcelWriter ???????????????????????? sheet ?????????????????????????????????????????? sheet???

??????????????????

?????? IExcelWriter ????????????????????? excelWriter.containsHead(bool) ?????????????????? excel ?????????

IExcelReader ????????????

/**
 * ???????????? sheet ???????????????
 * @param tClass ????????? javabean ??????
 * @return ????????????
 */
List<T> readAll(Class<T> tClass);

/**
 * ????????????????????????
 * @param tClass ??????
 * @param startIndex ??????????????????(???0??????)
 * @param endIndex ??????????????????
 * @return ?????????????????????
 */
List<T> read(Class<T> tClass, final int startIndex, final int endIndex);

?????? sheet

?????? IExcelReader ???????????????????????? sheet ?????????????????????????????????????????? sheet???

?????????????????? sax ?????????????????????????????? sheet ????????????

??????????????????

?????? IExcelReader ????????????????????? excelReader.containsHead(bool) ?????????????????? excel ?????????

????????????

excel ??????????????????

iexcel ??????

以上是关于java ?????? excel ???????????????java ????????? excel ??????OOM(????????????) exce的主要内容,如果未能解决你的问题,请参考以下文章

如何导出生成excel文件 java

java导出excel后打开出现错误

Java对Excel解析(求助)

java中怎么把数据写入excel

java 如何解析 excel

java导出复杂excel表格