Android?優(yōu)雅的讀寫Excel
Excel
apache 為 java開發(fā)者們提供了一套excel表格讀寫的工具:POI ,對(duì)于一個(gè)小白來(lái)說(shuō)每次讀寫使用POI需要寫一套復(fù)雜的讀寫流程實(shí)屬不易,這里小編為大家封裝了一套簡(jiǎn)單易用的excel讀寫工具
注解 | 描述 |
---|---|
@ExcelReadCell | Name 標(biāo)記表頭名稱 |
@ExcelTable | 使用類上用來(lái)指定表名 |
@ExcelWriteAdapter | 展開數(shù)據(jù)集合適配器 |
@ExcelWriteCell | 輸出文件編輯列名稱,列號(hào)信息。 |
@ExcelReadAggregate | 標(biāo)記類成員變量用來(lái)保存沒有標(biāo)記的數(shù)據(jù) |
讀取excel文件:
數(shù)據(jù)源(表名稱:測(cè)試表1):
物品編碼 | 物品名稱 | 存放位置 | 備注 | 日期 |
---|---|---|---|---|
TY122635 | 廚房-面團(tuán)分割機(jī) | 0 | SDS-30S | 2021.2.1 |
TY122654 | 黑白激光打印機(jī) | 0 | 兄弟 HL-5590DN | 2021.2.2 |
TY122652 | 黑白激光打印機(jī) | 0 | 兄弟 HL-5590DN | 2021.2.3 |
TY122634 | 臺(tái)式計(jì)算機(jī) | 0 | 聯(lián)想ThinkCentre M710t-D749 | 2021.2.4 |
創(chuàng)建實(shí)體對(duì)象:
@ExcelTable(sheetName = "測(cè)試表1") public class Table { @ExcelReadCell(name = "存放位置") public String storageLocation; @ExcelReadCell(name = "物品名稱") public String name; @ExcelReadCell(name = "物品編碼") public String code; //指定此變量保存其他數(shù)據(jù),也可以不處理 @ExcelReadAggregate public String extend; }
這里只指定了三列數(shù)據(jù),其他沒有指定的數(shù)據(jù)列(備注、日期),將被聚合保存到被**@ExcelReadAggregate標(biāo)注extend變量中,當(dāng)然如果不需要這些數(shù)據(jù)也可以不用聲明變量使用@ExcelReadAggregate**標(biāo)注。
被@ExcelReadAggregate標(biāo)注的對(duì)象接收的是一個(gè)JsonArray String 對(duì)象。
Table { storageLocation='0', note='SDS-30S', name='廚房-面團(tuán)分割機(jī)', code='TY2023122635', extend= '[{"name":"日期","value":"2021.2.1","index":7},{"name":"備注","value":"SDS30S","index":8}]'
Use:
Excel.get().readWith(is).doReadXLSX(new IParseListener<Table>() { @Override public void onStartParse() { } @Override public void onParse(Table test, JSONArray jsonArray) { } @Override public void onParseError(Exception e) { } @Override public void onEndParse() { } }, Table.class);
輸出excel文件:
@ExcelTable(sheetName = "測(cè)試表1") public class Table { @ExcelWriteCell(writeIndex = 2, writeName = "存放位置") public String storageLocation; @ExcelWriteCell(writeIndex = 1, writeName = "物品名稱") public String name; @ExcelWriteCell(writeIndex = 0, writeName = "物品編碼") public String code; //如果你將多個(gè)數(shù)據(jù)聚合在某一個(gè)變量中,可以通過(guò)實(shí)現(xiàn)IConvertParserAdapter接口來(lái)處理數(shù)據(jù)以便正確寫入文件 @ExcelWriteAdapter(adapter = JsonArrayConvertAdapter.class) public String extend; }
@ExcelWriteCell
ExcelWriteCell注解有兩個(gè)屬性,writeIndex指定數(shù)據(jù)所屬列,writeName指定列名稱
@ExcelWriteAdapter
ExcelWriteAdapter用來(lái)輔助工具正確寫入用戶自定義的聚合數(shù)據(jù)。
這里extend 的數(shù)據(jù)如下:
[ { "name":"日期", "value":"2021.2.9", "index":3 }, { "name":"備注", "value":"1.0", "index":4 } ]
Name 表示列名稱,value表示值,index表示列號(hào),這里的數(shù)據(jù)結(jié)構(gòu)可以自行定義。
IConvertParserAdapter 接口
使用了聚合數(shù)據(jù),就需要實(shí)現(xiàn)IConvertParserAdapter接口用來(lái)解析你的聚合數(shù)據(jù)并通過(guò)ISheet接口回調(diào)數(shù)據(jù)的列名稱,值,列號(hào)等信息。
針對(duì)上面的聚合數(shù)據(jù):
public class JsonArrayConvertAdapter implements IConvertParserAdapter { @Override public void convert(ISheet sheet, Object o) { JSONArray jsonArray = null; try { jsonArray = new JSONArray((String) o); } catch (JSONException e) { e.printStackTrace(); } for (int i = 0; i < jsonArray.length(); i++) { JSONObject json = (JSONObject) jsonArray.opt(i); String name = (String) json.opt("name"); Object value = json.opt("value"); int index = (int) json.opt("index"); sheet.onCreateCell(name, value, index); } } }
@ExcelWriteAdapter使用方法:
@ExcelWriteAdapter(adapter = JsonArrayConvertAdapter.class) public String extend;
Use:
Excel.get().writeWith(file).doWrite(new IWriteListener() { @Override public void onStartWrite() { Log.d(TAG, "onStartWrite: "); } @Override public void onWriteError(Exception e) { Log.d(TAG, "onWriteError: "+e); } @Override public void onEndWrite() { Log.d(TAG, "onEndWrite: "); } },data);
gitee地址:gitee.com/Jian-Hu/Exc…
github地址:github.com/Andihu/Exce…
以上就是Android 優(yōu)雅的讀寫Excel的詳細(xì)內(nèi)容,更多關(guān)于Android 讀寫Excel的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Android多國(guó)語(yǔ)言轉(zhuǎn)換Excel及Excel轉(zhuǎn)換為string詳解
- Android向Excel寫入數(shù)據(jù)導(dǎo)出U盤并發(fā)送郵件
- Android開發(fā)實(shí)現(xiàn)的導(dǎo)出數(shù)據(jù)庫(kù)到Excel表格功能【附源碼下載】
- Android開發(fā)實(shí)現(xiàn)讀取excel數(shù)據(jù)并保存為xml的方法
- Android開發(fā)實(shí)現(xiàn)生成excel的方法詳解
- Android 中讀取Excel文件實(shí)例詳解
- Android操作Excel文件的功能實(shí)現(xiàn)
相關(guān)文章
詳解Android studio 3+版本apk安裝失敗問(wèn)題
這篇文章主要介紹了詳解Android studio 3+版本apk安裝失敗問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04Android實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)下拉框 下拉列表spinner的實(shí)例代碼
這篇文章介紹了Android實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)下拉框 下拉列表spinner的實(shí)例代碼,有需要的朋友可以參考一下2013-10-10有關(guān)微博content的封裝實(shí)現(xiàn)詳解
本文將詳細(xì)介紹關(guān)于微博content的封裝實(shí)現(xiàn),需要的朋友可以參考下2012-11-11Android intent之間復(fù)雜參數(shù)傳遞方法詳解
這篇文章主要介紹了Android intent之間復(fù)雜參數(shù)傳遞方法,較為詳細(xì)的分析了Android中intent參數(shù)傳遞的常見方法與使用技巧,需要的朋友可以參考下2016-10-10Android中Progress的簡(jiǎn)單實(shí)例
這篇文章主要介紹了Android中Progress的簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05Android?RecyclerChart其它圖表繪制示例詳解
這篇文章主要為大家介紹了Android?RecyclerChart其它圖表繪制示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12基于android中讀取assets目錄下a.txt文件并進(jìn)行解析的深入分析
本篇文章是對(duì)在android需要中讀取assets目錄下a.txt文件進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05Android 限制edittext 整數(shù)和小數(shù)位數(shù) 過(guò)濾器(詳解)
下面小編就為大家?guī)?lái)一篇Android 限制edittext 整數(shù)和小數(shù)位數(shù) 過(guò)濾器(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04