EasyExcel讀取跨行單元格資料為空的解決辦法

2022-03-30 10:42:50 字數 1700 閱讀 7382

​ 目標excel檔案內容如下

​ 由於a列的「y00001」和c列的資料是b4,b5,b6共用的資料項,我理想中的情況是easyexcel在做讀取操作時,在讀取三行資料時都會把a列和c列的資料給讀出來。但是在讀取的時候,只有第一次讀取能把a、c列的資料讀取出來,後面兩次讀取a、c列的值為空。目前沒有從根本上找到原因,那就只能從程式的設計上去解決這個問題了。

​ 通過easyexcel讀取目標檔案

easyexcel.read("d:\\users\\admin\\documents\\tencent files\\1430424583\\filerecv\\demo.xls", new faguisheet()).sheet().doread();
​ 解決思路,如果a、c列值找不到了的話,就判定這是個跨行資料,就復用之前讀取的資料,需要用乙個map集合去儲存之前讀取的有效資料。

​ readlistener實現類

class faguisheet extends analysiseventlistener> 

if (stringutils.isblank(weifantiaokuan))

if (stringutils.isblank(chufayiju))

if (stringutils.isblank(weifachengdu))

if (stringutils.isblank(consequence))

if (stringutils.isblank(chufabiaozhun))

model.setfaguibianhao(faguibianhao);

model.setweifaxingwei(weifaxingwei);

model.setweifantiaokuan(weifantiaokuan);

model.setchufayiju(chufayiju);

model.setweifachengdu(weifachengdu);

model.setconsequence(consequence);

model.setchufabiaozhun(chufabiaozhun);

// 將資料放入list

datas.add(model);

// 復用跨行資料的實現

string uniquekey = o.get(0);

// 如果a列的值為空,那麼說明這是跨行列,如果取的值不是空,那說明這是第一次讀取跨行列資料

// 如果precontent為空,說明這是第一次讀取sheet**的資料

if (!stringutils.isblank(uniquekey) || precontent == null)

}/**

* **資料解析完之後呼叫

*/@override

public void doafterallanalysed(analysiscontext analysiscontext) }}

​ 資料插入成功

​ 當前easyexcel版本2.1.3,不知道後續版本會不會修復這個問題,先在這記錄一下

EasyExcel 固定 凍結 單元格

sheet.createfreezepane int cellnum,int rownum,int firstcellnum,int firstrollnum 四個引數的含義 表示要凍結的列數 表示要凍結的行數 表示右邊區域 可見 的首列序號 表示下邊區域 可見 的首行序號 四個引數分別代表 cel...

單元格跨行合併,單元格跨列合併

protected voidgridview1 onrowcreated object sender,gridviewroweventargs e if e.row.rowtype datacontrolrowtype.datarow region 合併單元格 合併某一列中的某些行 合併單元格 合併...

ExtJs grid 合併單元格 跨行跨列

在grid載入完成後直接呼叫此方法,需要注意的是,合併的單元格值必須一樣。2 合併單元格 3 param grid 要合併單元格的grid物件 4 param cols 要合併哪幾列 1,2,4 5 67function mergecells grid,cols 25 26 27var rowspa...