Android 讀寫Excel檔案

2021-09-02 01:35:56 字數 4000 閱讀 6473

android 讀寫 excel 檔案

需求背景:最近在做專案過程中,需要讀取 excel 檔案,excel檔案可以來自使用者插在android裝置上的外接u盤,也可以是儲存在專案assets、 raw裡面。 

資料參考:查閱了很多相關資料,讀取外接u盤主要用到了android 讀取usb檔案的第三方開源庫 

[github]( 

用到的jar檔案 jar 

讀寫asset raw檔案也可以用jxl.jar 

本文將從以下兩個方面介紹excel檔案的讀寫

讀寫外接 u 盤檔案

讀寫android 專案內assets raw 下的 excel 檔案

android 讀寫 u 盤 excel 檔案

首先我們需要註冊廣播監聽外接u盤的插入和拔出 

//監聽otg插入 拔出 

intentfilter usbdevicestatefilter = new intentfilter(); usbdevicestatefilter.addaction(usbmanager.action_usb_device_attached); 

usbdevicestatefilter.addaction(usbmanager.action_usb_device_detached); 

registerreceiver(musbreceiver, usbdevicestatefilter); 

//註冊監聽自定義廣播 

intentfilter filter = new intentfilter(action_usb_permission); 

registerreceiver(musbreceiver, filter); 

然後重寫onreceive()方法

private broadcastreceiver musbreceiver = new broadcastreceiver() else

} else

break;

case usbmanager.action_usb_device_attached://接收到儲存裝置插入廣播

usbdevice device_add = intent.getparcelableextra(usbmanager.extra_device);

if (device_add != null) else

break;

case usbmanager.action_usb_device_detached://接收到儲存裝置拔出廣播

usbdevice device_remove = intent.getparcelableextra(usbmanager.extra_device);

if (device_remove != null)

}接下來我們就需要對選擇的excel檔案進行讀取操作

public static void readfromexcel(final usbfile fileabsolutepath, final handler handler) throws ioexception catch (ioexception e)

logger.d("總表頁數為:" + workbook.getnumberofsheets());// 獲取表頁數

sheet sheet = workbook.getsheetat(0);

int sheetnum = workbook.getnumberofsheets();

int sheetrows = sheet.getlastrownum();

logger.d("the num of sheets is " + sheetnum);

logger.d("the name of sheet is  " + sheet.getsheetname());

logger.d("total rows is 行=" + sheetrows);

// sheet sheet = workbook.getsheetat(1);

int rownum = sheet.getlastrownum();// 獲取總行數

logger.d(rownum);

double sum = 0;

listsubsidyentities = new arraylist();

for (int i = 1; i <= rownum; i++) }}

for (int j = 0; j < subsidyentities.size(); j++)

message msg = message.obtain();

msg.arg1 = rownum;

msg.arg2 = (int) sum;

msg.what = constants.msg_get_data_from_excel_success;

handler.sendmessage(msg);

//                bigdecimal big = new bigdecimal(celldata.getnumericcellvalue());//將科學計數法表示的資料轉化為string型別

//                        logger.d("\t" + string.valueof(big));

}}).start();

}當傳入excel檔名後需要對當前檔案是excel 2003還是excel 2007進行處理

/*** @param filename

* @return

* @throws ioexception

* @title: getweebwork

* @description: todo(根據傳入的檔名獲取工作簿物件(workbook))

*/public static workbook getweebwork(usbfile filename) throws ioexception else if (".xlsx".equals(filetype.trim().tolowercase()))

}return workbook;

}通過handler訊息處理機制,將我們在子執行緒獲取到的excel檔案在主線程進行處理

private class myhandler extends handler

@override

public void handlemessage(message msg)

switch (msg.what) }}

最後我們在頁面銷毀時,登出廣播,關閉usb裝置

@override

protected void ondestroy()

if (sb != null)

if (storagedevices != null) }}

android 讀取assets 下的excel檔案

在我們做專案過程中,專案內測時,需要白名單控制,白名單實現的一種方案就是把使用者的登入名**號碼作為白名單,如果不在白名單內則提示無法登入。此時,我們的白名單使用者列表儲存在excel檔案中,我們可以把excel檔案儲存到assets下進行讀取。

首先需要把編輯好的excel檔案放到main目錄下的assets下。(如果位置放錯則讀取不到) 

然後通過子執行緒來讀取excel檔案內容

public static void getwhitelist(final context context, final handler handler)

workbook.close();

} catch (exception e)

message msg = message.obtain();

msg.obj = whiteslist;

msg.what = neturls.msg_get_white_list_succ;

// 傳送這個訊息到訊息佇列中

handler.sendmessage(msg);

}}).start();

}這裡我們提前知道了excel檔案裡面的內容,我這裡只有乙個**號碼列,所以要定義好相應的實體類 whitelistinfo,將我們讀取到的所以**號碼儲存到list集合當中。

在主線程獲取到我們讀取的內容

EasyML Python讀寫excel檔案

開啟anaconda prompt控制台輸入pip install pandas xlrd pymysql sqlalchemy cx oracle i 其中xlrd為讀取excel檔案的必備庫檔案,sqlalchemy pymysql cx oracle為讀取sql資料庫的必備庫檔案 資料源自訊飛...

一文搞定Qt讀寫excel以及qt讀寫xml資料

最終的實現效果圖 rc icons logo.ico.pro檔案同級目錄下加入 logo.ico 圖示檔案,執行檔案,檔案的圖示就被寫入軟體 ui首先拖幾個控制項出來 lineedit pushbutton textedit label 等 命名就不在細說了 最後的打包語句是 c users adm...

Excel檔案讀寫

對於c s模式的開發,讀寫excel檔案是很經常的事情,這裡我介紹一下通過oledb方式對excel檔案進行讀寫的方法,相比通過操作單元格的方式,應該在效能和效率上有很大優勢。首先 提供乙個excel檔案操作引擎類。using system using system.data using syste...