Android?優(yōu)雅的讀寫(xiě)Excel
Excel
apache 為 java開(kāi)發(fā)者們提供了一套excel表格讀寫(xiě)的工具:POI ,對(duì)于一個(gè)小白來(lái)說(shuō)每次讀寫(xiě)使用POI需要寫(xiě)一套復(fù)雜的讀寫(xiě)流程實(shí)屬不易,這里小編為大家封裝了一套簡(jiǎn)單易用的excel讀寫(xiě)工具
| 注解 | 描述 |
|---|---|
| @ExcelReadCell | Name 標(biāo)記表頭名稱 |
| @ExcelTable | 使用類上用來(lái)指定表名 |
| @ExcelWriteAdapter | 展開(kāi)數(shù)據(jù)集合適配器 |
| @ExcelWriteCell | 輸出文件編輯列名稱,列號(hào)信息。 |
| @ExcelReadAggregate | 標(biāo)記類成員變量用來(lái)保存沒(mé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ù),其他沒(méi)有指定的數(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ù)以便正確寫(xiě)入文件
@ExcelWriteAdapter(adapter = JsonArrayConvertAdapter.class)
public String extend;
}
@ExcelWriteCell
ExcelWriteCell注解有兩個(gè)屬性,writeIndex指定數(shù)據(jù)所屬列,writeName指定列名稱
@ExcelWriteAdapter
ExcelWriteAdapter用來(lái)輔助工具正確寫(xiě)入用戶自定義的聚合數(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)雅的讀寫(xiě)Excel的詳細(xì)內(nèi)容,更多關(guān)于Android 讀寫(xiě)Excel的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Android多國(guó)語(yǔ)言轉(zhuǎn)換Excel及Excel轉(zhuǎn)換為string詳解
- Android向Excel寫(xiě)入數(shù)據(jù)導(dǎo)出U盤(pán)并發(fā)送郵件
- Android開(kāi)發(fā)實(shí)現(xiàn)的導(dǎo)出數(shù)據(jù)庫(kù)到Excel表格功能【附源碼下載】
- Android開(kāi)發(fā)實(shí)現(xiàn)讀取excel數(shù)據(jù)并保存為xml的方法
- Android開(kāi)發(fā)實(shí)現(xiàn)生成excel的方法詳解
- Android 中讀取Excel文件實(shí)例詳解
- Android操作Excel文件的功能實(shí)現(xiàn)
相關(guān)文章
Android日期選擇器對(duì)話框DatePickerDialog使用詳解
這篇文章主要為大家詳細(xì)介紹了Android日期選擇器對(duì)話框DatePickerDialog的使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
Android實(shí)現(xiàn)Unity3D下RTMP推送的示例
像Unity3D下的RTMP或RTSP播放器一樣,好多開(kāi)發(fā)者苦于在Unity環(huán)境下,如何高效率低延遲的把數(shù)據(jù)采集并編碼實(shí)時(shí)推送到流媒體服務(wù)器,實(shí)現(xiàn)Unity場(chǎng)景下的低延遲推拉流方案。本文介紹幾種RTMP推送的方案2021-06-06
android廣角相機(jī)畸變校正算法和實(shí)現(xiàn)示例
今天小編就為大家分享一篇android廣角相機(jī)畸變校正算法和實(shí)現(xiàn)示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
Android如何通過(guò)手機(jī)自動(dòng)獲取短信驗(yàn)證碼
注冊(cè)帳號(hào)時(shí),經(jīng)常需要手機(jī)獲取驗(yàn)證碼,Android如何通過(guò)手機(jī)自動(dòng)獲取短信驗(yàn)證碼,下面看看小編給大家分享的一段代碼,感興趣的小伙伴們可以參考一下2016-03-03
android PopupWindow點(diǎn)擊外部和返回鍵消失的解決方法
這篇文章主要介紹了android PopupWindow點(diǎn)擊外部和返回鍵消失的解決方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。2017-02-02
Android 解決WebView調(diào)用loadData()方法顯示亂碼的問(wèn)題
這篇文章主要介紹了Android 解決WebView調(diào)用loadData()方法顯示亂碼的問(wèn)題的相關(guān)資料,希望通過(guò)本文能幫助到大家解決這樣的問(wèn)題,需要的朋友可以參考下2017-09-09

