forked from fanruan/easyexcel
Jiaju Zhuang
5 years ago
20 changed files with 354 additions and 43 deletions
@ -0,0 +1,60 @@ |
|||||||
|
package com.alibaba.excel.analysis.v03; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import org.apache.poi.hssf.eventusermodel.EventWorkbookBuilder; |
||||||
|
import org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener; |
||||||
|
import org.apache.poi.hssf.eventusermodel.HSSFEventFactory; |
||||||
|
import org.apache.poi.hssf.eventusermodel.HSSFListener; |
||||||
|
import org.apache.poi.hssf.eventusermodel.HSSFRequest; |
||||||
|
import org.apache.poi.hssf.eventusermodel.MissingRecordAwareHSSFListener; |
||||||
|
import org.apache.poi.hssf.record.BoundSheetRecord; |
||||||
|
import org.apache.poi.hssf.record.Record; |
||||||
|
import org.apache.poi.poifs.filesystem.POIFSFileSystem; |
||||||
|
|
||||||
|
import com.alibaba.excel.analysis.v03.handlers.BofRecordHandler; |
||||||
|
import com.alibaba.excel.context.AnalysisContext; |
||||||
|
import com.alibaba.excel.exception.ExcelAnalysisException; |
||||||
|
import com.alibaba.excel.read.metadata.ReadSheet; |
||||||
|
|
||||||
|
/** |
||||||
|
* In some cases, you need to know the number of sheets in advance and only read the file once in advance. |
||||||
|
* |
||||||
|
* @author Jiaju Zhuang |
||||||
|
*/ |
||||||
|
public class XlsListSheetListener implements HSSFListener { |
||||||
|
private POIFSFileSystem poifsFileSystem; |
||||||
|
private List<ReadSheet> sheetList; |
||||||
|
private XlsRecordHandler bofRecordHandler; |
||||||
|
|
||||||
|
public XlsListSheetListener(AnalysisContext analysisContext, POIFSFileSystem poifsFileSystem) { |
||||||
|
this.poifsFileSystem = poifsFileSystem; |
||||||
|
sheetList = new ArrayList<ReadSheet>(); |
||||||
|
bofRecordHandler = new BofRecordHandler(analysisContext, sheetList, false); |
||||||
|
bofRecordHandler.init(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void processRecord(Record record) { |
||||||
|
bofRecordHandler.processRecord(record); |
||||||
|
} |
||||||
|
|
||||||
|
public List<ReadSheet> getSheetList() { |
||||||
|
MissingRecordAwareHSSFListener listener = new MissingRecordAwareHSSFListener(this); |
||||||
|
HSSFListener formatListener = new FormatTrackingHSSFListener(listener); |
||||||
|
HSSFEventFactory factory = new HSSFEventFactory(); |
||||||
|
HSSFRequest request = new HSSFRequest(); |
||||||
|
EventWorkbookBuilder.SheetRecordCollectingListener workbookBuildingListener = |
||||||
|
new EventWorkbookBuilder.SheetRecordCollectingListener(formatListener); |
||||||
|
request.addListenerForAllRecords(workbookBuildingListener); |
||||||
|
|
||||||
|
try { |
||||||
|
factory.processWorkbookEvents(request, poifsFileSystem); |
||||||
|
} catch (IOException e) { |
||||||
|
throw new ExcelAnalysisException(e); |
||||||
|
} |
||||||
|
return sheetList; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,11 @@ |
|||||||
|
package com.alibaba.easyexcel.test.core.multiplesheets; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Jiaju Zhuang |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class MultipleSheetsData { |
||||||
|
private String title; |
||||||
|
} |
@ -0,0 +1,56 @@ |
|||||||
|
package com.alibaba.easyexcel.test.core.multiplesheets; |
||||||
|
|
||||||
|
import java.io.File; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import org.junit.Assert; |
||||||
|
import org.junit.BeforeClass; |
||||||
|
import org.junit.FixMethodOrder; |
||||||
|
import org.junit.Test; |
||||||
|
import org.junit.runners.MethodSorters; |
||||||
|
|
||||||
|
import com.alibaba.easyexcel.test.util.TestFileUtil; |
||||||
|
import com.alibaba.excel.EasyExcel; |
||||||
|
import com.alibaba.excel.ExcelReader; |
||||||
|
import com.alibaba.excel.read.metadata.ReadSheet; |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @author Jiaju Zhuang |
||||||
|
*/ |
||||||
|
@FixMethodOrder(MethodSorters.NAME_ASCENDING) |
||||||
|
public class MultipleSheetsDataTest { |
||||||
|
|
||||||
|
private static File file07; |
||||||
|
private static File file03; |
||||||
|
|
||||||
|
@BeforeClass |
||||||
|
public static void init() { |
||||||
|
file07 = TestFileUtil.readFile("multiplesheets" + File.separator + "multiplesheets.xlsx"); |
||||||
|
file03 = TestFileUtil.readFile("multiplesheets" + File.separator + "multiplesheets.xls"); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void t01Read07() { |
||||||
|
read(file07); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void t020Read03() { |
||||||
|
read(file03); |
||||||
|
} |
||||||
|
|
||||||
|
private void read(File file) { |
||||||
|
MultipleSheetsListener multipleSheetsListener = new MultipleSheetsListener(); |
||||||
|
ExcelReader excelReader = EasyExcel.read(file, MultipleSheetsData.class, multipleSheetsListener).build(); |
||||||
|
List<ReadSheet> sheets = excelReader.excelExecutor().sheetList(); |
||||||
|
int count = 1; |
||||||
|
for (ReadSheet readSheet : sheets) { |
||||||
|
excelReader.read(readSheet); |
||||||
|
Assert.assertEquals((long)multipleSheetsListener.getList().size(), (long)count); |
||||||
|
count++; |
||||||
|
} |
||||||
|
excelReader.finish(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,41 @@ |
|||||||
|
package com.alibaba.easyexcel.test.core.multiplesheets; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import org.junit.Assert; |
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
|
||||||
|
import com.alibaba.easyexcel.test.core.parameter.ParameterData; |
||||||
|
import com.alibaba.easyexcel.test.core.parameter.ParameterDataListener; |
||||||
|
import com.alibaba.excel.context.AnalysisContext; |
||||||
|
import com.alibaba.excel.event.AnalysisEventListener; |
||||||
|
import com.alibaba.fastjson.JSON; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Jiaju Zhuang |
||||||
|
*/ |
||||||
|
public class MultipleSheetsListener extends AnalysisEventListener<MultipleSheetsData> { |
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(MultipleSheetsListener.class); |
||||||
|
List<MultipleSheetsData> list = new ArrayList<MultipleSheetsData>(); |
||||||
|
|
||||||
|
@Override |
||||||
|
public void invoke(MultipleSheetsData data, AnalysisContext context) { |
||||||
|
list.add(data); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void doAfterAllAnalysed(AnalysisContext context) { |
||||||
|
Assert.assertEquals(list.get(0).getTitle(), "表1数据"); |
||||||
|
LOGGER.debug("All row:{}", JSON.toJSONString(list)); |
||||||
|
} |
||||||
|
|
||||||
|
public List<MultipleSheetsData> getList() { |
||||||
|
return list; |
||||||
|
} |
||||||
|
|
||||||
|
public void setList(List<MultipleSheetsData> list) { |
||||||
|
this.list = list; |
||||||
|
} |
||||||
|
} |
Binary file not shown.
Binary file not shown.
Loading…
Reference in new issue