Android?優(yōu)雅的讀寫Excel
Excel
apache 為 java開發(fā)者們提供了一套excel表格讀寫的工具:POI ,對于一個小白來說每次讀寫使用POI需要寫一套復雜的讀寫流程實屬不易,這里小編為大家封裝了一套簡單易用的excel讀寫工具
| 注解 | 描述 |
|---|---|
| @ExcelReadCell | Name 標記表頭名稱 |
| @ExcelTable | 使用類上用來指定表名 |
| @ExcelWriteAdapter | 展開數(shù)據(jù)集合適配器 |
| @ExcelWriteCell | 輸出文件編輯列名稱,列號信息。 |
| @ExcelReadAggregate | 標記類成員變量用來保存沒有標記的數(shù)據(jù) |
讀取excel文件:
數(shù)據(jù)源(表名稱:測試表1):
| 物品編碼 | 物品名稱 | 存放位置 | 備注 | 日期 |
|---|---|---|---|---|
| TY122635 | 廚房-面團分割機 | 0 | SDS-30S | 2021.2.1 |
| TY122654 | 黑白激光打印機 | 0 | 兄弟 HL-5590DN | 2021.2.2 |
| TY122652 | 黑白激光打印機 | 0 | 兄弟 HL-5590DN | 2021.2.3 |
| TY122634 | 臺式計算機 | 0 | 聯(lián)想ThinkCentre M710t-D749 | 2021.2.4 |
創(chuàng)建實體對象:
@ExcelTable(sheetName = "測試表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標注extend變量中,當然如果不需要這些數(shù)據(jù)也可以不用聲明變量使用@ExcelReadAggregate**標注。
被@ExcelReadAggregate標注的對象接收的是一個JsonArray String 對象。
Table
{
storageLocation='0',
note='SDS-30S',
name='廚房-面團分割機',
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 = "測試表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;
//如果你將多個數(shù)據(jù)聚合在某一個變量中,可以通過實現(xiàn)IConvertParserAdapter接口來處理數(shù)據(jù)以便正確寫入文件
@ExcelWriteAdapter(adapter = JsonArrayConvertAdapter.class)
public String extend;
}
@ExcelWriteCell
ExcelWriteCell注解有兩個屬性,writeIndex指定數(shù)據(jù)所屬列,writeName指定列名稱
@ExcelWriteAdapter
ExcelWriteAdapter用來輔助工具正確寫入用戶自定義的聚合數(shù)據(jù)。
這里extend 的數(shù)據(jù)如下:
[
{
"name":"日期",
"value":"2021.2.9",
"index":3
},
{
"name":"備注",
"value":"1.0",
"index":4
}
]
Name 表示列名稱,value表示值,index表示列號,這里的數(shù)據(jù)結構可以自行定義。
IConvertParserAdapter 接口
使用了聚合數(shù)據(jù),就需要實現(xiàn)IConvertParserAdapter接口用來解析你的聚合數(shù)據(jù)并通過ISheet接口回調(diào)數(shù)據(jù)的列名稱,值,列號等信息。
針對上面的聚合數(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的詳細內(nèi)容,更多關于Android 讀寫Excel的資料請關注腳本之家其它相關文章!
相關文章
Android日期選擇器對話框DatePickerDialog使用詳解
這篇文章主要為大家詳細介紹了Android日期選擇器對話框DatePickerDialog的使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01
Android實現(xiàn)Unity3D下RTMP推送的示例
像Unity3D下的RTMP或RTSP播放器一樣,好多開發(fā)者苦于在Unity環(huán)境下,如何高效率低延遲的把數(shù)據(jù)采集并編碼實時推送到流媒體服務器,實現(xiàn)Unity場景下的低延遲推拉流方案。本文介紹幾種RTMP推送的方案2021-06-06
android PopupWindow點擊外部和返回鍵消失的解決方法
這篇文章主要介紹了android PopupWindow點擊外部和返回鍵消失的解決方法,非常具有實用價值,需要的朋友可以參考下。2017-02-02
Android 解決WebView調(diào)用loadData()方法顯示亂碼的問題
這篇文章主要介紹了Android 解決WebView調(diào)用loadData()方法顯示亂碼的問題的相關資料,希望通過本文能幫助到大家解決這樣的問題,需要的朋友可以參考下2017-09-09

