procedure.run();
}
}
package com.apex.bss.mod.util.excle;
/**
- Created by Feng
*/
public interface Procedure {
void run();
}
我们扩展了XSSFSheetXMLHandler
类,并且重写了endDocument
方法,在原本的类中,该方法没有任何操作,在扩展类中,我们调用Procedure.run
方法来处理excle读取完毕时的业务逻辑。
poi自带的事件处理接口是XSSFSheetXMLHandler.SheetContentsHandler
,代码如下
public interface SheetContentsHandler {
void startRow(int var1);
void endRow(int var1);
void cell(String var1, String var2, XSSFComment var3);
void headerFooter(String var1, boolean var2, String var3);
}
可以看到数据是基于cell
被处理的,我们要在startRow
和endRow
方法中自己构建行数据
public class SheetHandler implements XSSFSheetXMLHandler.SheetContentsHandler,Procedure {
protected List row = new LinkedList<>();
private ExcleHandler excleHandler;
private int preIndex = 1;
public SheetHandler(ExcleHandler excleHandler){
this.excleHandler = excleHandler;
}
@Override
public void run() {
excleHandler.over();
}
@Override
public void startRow(int i) {
row.clear();
}
@Override
public void endRow(int i) {
excleHandler.handleRow(row,i);
}
@Override
public void cell(String cellReference, String formattedValue, XSSFComment comment) {
int index = excleCelNumToIndex(cellReference);
if(index - preIndex > 1){
for(int i = 0;i < index - preIndex - 1;i++){
row.add(“”);
}
}
row.add(formattedValue);
preIndex = index;
}
@Override
public void headerFooter(String s, boolean b, Str