mirror of https://github.com/alibaba/easyexcel
zhuangjiaju
6 years ago
28 changed files with 489 additions and 68 deletions
@ -0,0 +1,53 @@
|
||||
package com.alibaba.excel.analysis.v07; |
||||
|
||||
import org.slf4j.Logger; |
||||
import org.slf4j.LoggerFactory; |
||||
import org.xml.sax.Attributes; |
||||
import org.xml.sax.SAXException; |
||||
import org.xml.sax.helpers.DefaultHandler; |
||||
|
||||
import com.alibaba.excel.cache.Cache; |
||||
|
||||
/** |
||||
* Sax read sharedStringsTable.xml |
||||
* |
||||
* @author zhuangjiaju |
||||
*/ |
||||
public class SharedStringsTableHandler extends DefaultHandler { |
||||
private static final Logger LOGGER = LoggerFactory.getLogger(SharedStringsTableHandler.class); |
||||
|
||||
private String currentData; |
||||
private boolean isT; |
||||
private int index = 0; |
||||
private Cache cache; |
||||
|
||||
public SharedStringsTableHandler(Cache cache) { |
||||
this.cache = cache; |
||||
} |
||||
|
||||
@Override |
||||
public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException { |
||||
if ("t".equals(name)) { |
||||
currentData = null; |
||||
isT = true; |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void endElement(String uri, String localName, String name) throws SAXException { |
||||
if ("t".equals(name)) { |
||||
currentData = null; |
||||
isT = false; |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void characters(char[] ch, int start, int length) throws SAXException { |
||||
if (isT) { |
||||
cache.put(index++, new String(ch, start, length)); |
||||
if (index % 100000 == 0) { |
||||
LOGGER.info("row:{} ,mem:{},data:{}", index, Runtime.getRuntime().totalMemory()); |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,27 @@
|
||||
package com.alibaba.excel.cache; |
||||
|
||||
/** |
||||
* cache |
||||
* |
||||
* @author zhuangjiaju |
||||
*/ |
||||
public interface Cache { |
||||
|
||||
/** |
||||
* put |
||||
* |
||||
* @param key |
||||
* @param value |
||||
*/ |
||||
void put(Integer key, String value); |
||||
|
||||
/** |
||||
* get |
||||
* |
||||
* @param key |
||||
* @return |
||||
*/ |
||||
String get(Integer key); |
||||
|
||||
void finish(); |
||||
} |
@ -0,0 +1,46 @@
|
||||
package com.alibaba.excel.cache; |
||||
|
||||
import java.io.File; |
||||
import java.util.Map; |
||||
|
||||
import org.ehcache.PersistentCacheManager; |
||||
import org.ehcache.config.builders.CacheConfigurationBuilder; |
||||
import org.ehcache.config.builders.CacheManagerBuilder; |
||||
import org.ehcache.config.builders.ResourcePoolsBuilder; |
||||
import org.ehcache.config.units.MemoryUnit; |
||||
|
||||
import com.alibaba.excel.util.POITempFile; |
||||
|
||||
/** |
||||
* Default cache |
||||
* |
||||
* @author zhuangjiaju |
||||
*/ |
||||
public class Ehcache implements Cache { |
||||
private org.ehcache.Cache<Integer, Map<Integer, String>> cache; |
||||
|
||||
public Ehcache() { |
||||
File file = POITempFile.createCacheTmpFile(); |
||||
PersistentCacheManager persistentCacheManager = |
||||
CacheManagerBuilder.newCacheManagerBuilder().with(CacheManagerBuilder.persistence(file)) |
||||
.withCache("cache", CacheConfigurationBuilder.newCacheConfigurationBuilder(Integer.class, String.class, |
||||
ResourcePoolsBuilder.newResourcePoolsBuilder().disk(10, MemoryUnit.GB))) |
||||
.build(true); |
||||
this.cache = persistentCacheManager.getCache("cache", Integer.class, String.class); |
||||
} |
||||
|
||||
@Override |
||||
public void put(Integer key, String value) { |
||||
cache.put(key, value); |
||||
} |
||||
|
||||
@Override |
||||
public String get(Integer key) { |
||||
return cache.get(key); |
||||
} |
||||
|
||||
@Override |
||||
public void finish() { |
||||
|
||||
} |
||||
} |
@ -0,0 +1,31 @@
|
||||
package com.alibaba.excel.cache; |
||||
|
||||
import org.apache.poi.xssf.model.SharedStringsTable; |
||||
|
||||
/** |
||||
* Default cache |
||||
* |
||||
* @author zhuangjiaju |
||||
*/ |
||||
public class SharedStringsTableCache implements Cache { |
||||
private SharedStringsTable sharedStringsTable; |
||||
|
||||
public SharedStringsTableCache(SharedStringsTable sharedStringsTable) { |
||||
this.sharedStringsTable = sharedStringsTable; |
||||
} |
||||
|
||||
@Override |
||||
public void put(Integer key, String value) { |
||||
throw new UnsupportedOperationException("Can not put value"); |
||||
} |
||||
|
||||
@Override |
||||
public String get(Integer key) { |
||||
return sharedStringsTable.getItemAt(key).toString(); |
||||
} |
||||
|
||||
@Override |
||||
public void finish() { |
||||
|
||||
} |
||||
} |
@ -0,0 +1,40 @@
|
||||
package com.alibaba.easyexcel.test.ehcache; |
||||
|
||||
import java.io.File; |
||||
|
||||
import org.ehcache.Cache; |
||||
import org.ehcache.PersistentCacheManager; |
||||
import org.ehcache.config.builders.CacheConfigurationBuilder; |
||||
import org.ehcache.config.builders.CacheManagerBuilder; |
||||
import org.ehcache.config.builders.ResourcePoolsBuilder; |
||||
import org.ehcache.config.units.MemoryUnit; |
||||
import org.junit.Ignore; |
||||
import org.junit.Test; |
||||
import org.slf4j.Logger; |
||||
import org.slf4j.LoggerFactory; |
||||
|
||||
import com.alibaba.excel.util.POITempFile; |
||||
|
||||
/** |
||||
* @author zhuangjiaju |
||||
*/ |
||||
@Ignore |
||||
public class EncacheTest { |
||||
private static final Logger LOGGER = LoggerFactory.getLogger(EncacheTest.class); |
||||
|
||||
@Test |
||||
public void cache() { |
||||
File file = POITempFile.createCacheTmpFile(); |
||||
PersistentCacheManager persistentCacheManager = |
||||
CacheManagerBuilder.newCacheManagerBuilder().with(CacheManagerBuilder.persistence(file)) |
||||
.withCache("cache", CacheConfigurationBuilder.newCacheConfigurationBuilder(Integer.class, String.class, |
||||
ResourcePoolsBuilder.newResourcePoolsBuilder().disk(10, MemoryUnit.GB))) |
||||
.build(true); |
||||
Cache<Integer, String> cache = persistentCacheManager.getCache("cache", Integer.class, String.class); |
||||
cache.put(1, "测试1"); |
||||
LOGGER.info("cache:{}", cache.get(1)); |
||||
persistentCacheManager.close(); |
||||
LOGGER.info("close"); |
||||
POITempFile.delete(file); |
||||
} |
||||
} |
@ -0,0 +1,33 @@
|
||||
package com.alibaba.easyexcel.test.read.large; |
||||
|
||||
import java.io.InputStream; |
||||
|
||||
import org.junit.Test; |
||||
import org.slf4j.Logger; |
||||
import org.slf4j.LoggerFactory; |
||||
|
||||
import com.alibaba.easyexcel.test.util.FileUtil; |
||||
import com.alibaba.excel.EasyExcelFactory; |
||||
import com.alibaba.excel.ExcelReader; |
||||
import com.alibaba.excel.metadata.Sheet; |
||||
|
||||
/** |
||||
* Simple data test |
||||
* |
||||
* @author zhuangjiaju |
||||
*/ |
||||
public class LargeData07Test { |
||||
private static final Logger LOGGER = LoggerFactory.getLogger(LargeData07Test.class); |
||||
|
||||
@Test |
||||
public void large() throws Exception { |
||||
LOGGER.info("start"); |
||||
long start = System.currentTimeMillis(); |
||||
InputStream inputStream = FileUtil.readFile("large/large07.xlsx"); |
||||
ExcelReader excelReader = EasyExcelFactory.getReader(inputStream, new LargeDataListener()); |
||||
excelReader.read(new Sheet(1, 1)); |
||||
inputStream.close(); |
||||
LOGGER.info("time:{}", System.currentTimeMillis() - start); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,29 @@
|
||||
package com.alibaba.easyexcel.test.read.large; |
||||
|
||||
import org.slf4j.Logger; |
||||
import org.slf4j.LoggerFactory; |
||||
|
||||
import com.alibaba.easyexcel.test.read.simple.SimpleDataListener; |
||||
import com.alibaba.excel.context.AnalysisContext; |
||||
import com.alibaba.excel.event.AnalysisEventListener; |
||||
import com.alibaba.fastjson.JSON; |
||||
|
||||
/** |
||||
* @author zhuangjiaju |
||||
*/ |
||||
public class LargeDataListener extends AnalysisEventListener<Object> { |
||||
private static final Logger LOGGER = LoggerFactory.getLogger(SimpleDataListener.class); |
||||
private int count = 0; |
||||
|
||||
@Override |
||||
public void invoke(Object object, AnalysisContext context) { |
||||
count++; |
||||
if (count % 100000 == 0) { |
||||
LOGGER.info("row:{} ,mem:{},data:{}", count, Runtime.getRuntime().totalMemory(), JSON.toJSONString(object)); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void doAfterAllAnalysed(AnalysisContext context) {} |
||||
|
||||
} |
@ -0,0 +1,16 @@
|
||||
package com.alibaba.easyexcel.test.read.simple; |
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty; |
||||
|
||||
import lombok.Data; |
||||
|
||||
/** |
||||
* @author zhuangjiaju |
||||
*/ |
||||
@Data |
||||
public class SimpleData { |
||||
@ExcelProperty("字符串1") |
||||
private String string1; |
||||
@ExcelProperty("字符串2") |
||||
private String string2; |
||||
} |
@ -0,0 +1,26 @@
|
||||
package com.alibaba.easyexcel.test.read.simple; |
||||
|
||||
import java.io.InputStream; |
||||
|
||||
import org.junit.Test; |
||||
|
||||
import com.alibaba.easyexcel.test.util.FileUtil; |
||||
import com.alibaba.excel.EasyExcelFactory; |
||||
import com.alibaba.excel.ExcelReader; |
||||
import com.alibaba.excel.metadata.Sheet; |
||||
|
||||
/** |
||||
* Simple data test |
||||
* |
||||
* @author zhuangjiaju |
||||
*/ |
||||
public class SimpleData07Test { |
||||
|
||||
@Test |
||||
public void simple() throws Exception { |
||||
InputStream inputStream = FileUtil.readFile("simple/simple07.xlsx"); |
||||
ExcelReader excelReader = EasyExcelFactory.getReader(inputStream, new SimpleDataListener()); |
||||
excelReader.read(new Sheet(1, 1), SimpleData.class); |
||||
inputStream.close(); |
||||
} |
||||
} |
@ -0,0 +1,31 @@
|
||||
package com.alibaba.easyexcel.test.read.simple; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
import org.slf4j.Logger; |
||||
import org.slf4j.LoggerFactory; |
||||
|
||||
import com.alibaba.excel.context.AnalysisContext; |
||||
import com.alibaba.excel.event.AnalysisEventListener; |
||||
import com.alibaba.fastjson.JSON; |
||||
|
||||
/** |
||||
* @author zhuangjiaju |
||||
*/ |
||||
public class SimpleDataListener extends AnalysisEventListener<Object> { |
||||
private static final Logger LOGGER = LoggerFactory.getLogger(SimpleDataListener.class); |
||||
|
||||
List<Object> list = new ArrayList<Object>(); |
||||
|
||||
@Override |
||||
public void invoke(Object object, AnalysisContext context) { |
||||
list.add(object); |
||||
LOGGER.info("data:{}", JSON.toJSONString(object)); |
||||
} |
||||
|
||||
@Override |
||||
public void doAfterAllAnalysed(AnalysisContext context) { |
||||
assert list.size() == 10; |
||||
} |
||||
} |
Binary file not shown.
Binary file not shown.
Loading…
Reference in new issue