在面对选择国家地区,选择手机号码区号等信息的时候,常常我们是读取已存好的数据,我现在读取的就是excel里面的数据,所以在此记录下读取的方法以及注意点。 下面就是读取国际地区手机区号的数据效果图:

excel表格里面数据

1.准备工作

1.1 excel 表格 我在assets 下放的的excel 表

1.2 读取excel 需要的jar 包

下载地址:jxl 读取excel 需要的jar 包

注意点:

assets 的目录不要建错,他是在main 级别目录下的,建错地方会读取不到文件。

2.相关代码

2.1 读取excel

/**

* 获取 excel 表格中的数据,不能在主线程中调用

*

* @param xlsName excel 表格的名称

* @param index 第几张表格中的数据

*/

private ArrayList getXlsData(String xlsName, int index) {

ArrayList countryList = new ArrayList();

AssetManager assetManager = getAssets();

try {

Workbook workbook = Workbook.getWorkbook(assetManager.open(xlsName));

Sheet sheet = workbook.getSheet(index);

int sheetNum = workbook.getNumberOfSheets();

int sheetRows = sheet.getRows();

int sheetColumns = sheet.getColumns();

Log.d(TAG, "the num of sheets is " + sheetNum);

Log.d(TAG, "the name of sheet is " + sheet.getName());

Log.d(TAG, "total rows is 行=" + sheetRows);

Log.d(TAG, "total cols is 列=" + sheetColumns);

for (int i = 0; i < sheetRows; i++) {

CountryModel countryModel = new CountryModel();

countryModel.setChinaName(sheet.getCell(0, i).getContents());

countryModel.setEnglishName(sheet.getCell(1, i).getContents());

countryModel.setAreaNumber(sheet.getCell(2, i).getContents());

countryList.add(countryModel);

}

workbook.close();

} catch (Exception e) {

Log.e(TAG, "read error=" + e, e);

}

return countryList;

}

//在异步方法中 调用

private class ExcelDataLoader extends AsyncTask> {

@Override

protected void onPreExecute() {

progressDialog.setMessage("加载中,请稍后......");

progressDialog.setCanceledOnTouchOutside(false);

progressDialog.show();

}

@Override

protected ArrayList doInBackground(String... params) {

return getXlsData(params[0], 0);

}

@Override

protected void onPostExecute(ArrayList countryModels) {

if (progressDialog.isShowing()) {

progressDialog.dismiss();

}

if(countryModels != null && countryModels.size()>0){

//存在数据

sortByName(countryModels);

setupData(countryModels);

}else {

//加载失败

}

}

}

说明

sheet.getCell(0, i).getContents() 表示第0行第1列的数据,因为事先是知道excel 表中的内容的,所以行和列自己定义就好了。

2.2 相关调用

new ExcelDataLoader().execute("phone_country_info.xls");

2.3 结果显示

查看原文