JAVA解析Excel工具easyexcel的简要使用

星期三, 2018-12-19 | Author: Lee | JAVA-and-J2EE | 5,862 views

excel的版本说明:
Excel2003版最大行数是65536行。Excel2007开始的版本最大行数是1048576行。

Excel2003的最大列数是256列,2007以上版本是16384列。

项目git地址:https://github.com/alibaba/easyexcel

Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,
但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。
easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用POI sax依然需要100M左右内存降低到KB级别,并且再大的excel不会出现内存溢出,03版依赖POI的sax模式。
在上层做了模型转换的封装,让使用者更加简单方便

使用pom.xml配置

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>easyexcel</artifactId>
  <version>1.0.3</version>
</dependency>

使用代码如下:

package com.pomelolee.xls;
 
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
 
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.Sheet;
import com.alibaba.excel.metadata.Table;
import com.alibaba.excel.support.ExcelTypeEnum;
 
/**
 * @author pomelolee
 *
 * @time 2018年12月19日 下午2:42:18
 */
public class EasyXls {
 
	public static void main(String[] args) throws Exception {
		writeWithoutHead();
	}
 
	public static void writeWithoutHead() throws Exception {
		try (OutputStream out = new FileOutputStream("E://withHead.xlsx");) {
			ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLSX);
			Sheet sheet1 = new Sheet(1, 0);
			sheet1.setSheetName("表一");
			List<List<String>> head = new ArrayList<List<String>>();
			List<String> headCoulumn1 = new ArrayList<String>();
			List<String> headCoulumn2 = new ArrayList<String>();
			List<String> headCoulumn3 = new ArrayList<String>();
			headCoulumn1.add("第一列");
			headCoulumn2.add("第二列");
			headCoulumn3.add("第三列");
			head.add(headCoulumn1);
			head.add(headCoulumn2);
			head.add(headCoulumn3);
			Table table = new Table(1);
			table.setHead(head);
			for (int i = 0; i < 10; i++) {
				writeDataToTable(table, sheet1, writer);
			}
			Sheet sheet2 = new Sheet(2, 0);
			sheet2.setSheetName("表二");
			writeDataToTable(table, sheet2, writer);
			writer.finish();
		}
	}
 
	private static void writeDataToTable(Table table, Sheet sheet, ExcelWriter writer) {
		List<List<String>> data = new ArrayList<>();
		for (int i = 0; i < 100000; i++) {
			List<String> item = new ArrayList<>();
			item.add("item0" + i);
			item.add("item1" + i);
			item.add("item2" + i);
			data.add(item);
		}
		writer.write0(data, sheet, table);
	}
 
}

Tags:

文章作者: Lee

本文地址: https://www.pomelolee.com/1833.html

除非注明,Pomelo Lee文章均为原创,转载请以链接形式标明本文地址

No comments yet.

Leave a comment

Search

文章分类

Links

Meta