android 读取excel数据并保存为xml文件

释放双眼,带上耳机,听听看~!

今天,简单讲讲android如

读取excel数据并保存为xml文件。

最近,我这边需要把客户翻译的Excel字符资源作为xml字符资源,当时自己是一个一个的复制,发现效率太低。后来,在网上搜索了资料,发现可以读取Excel字符资源然后转成所需的xml资源,这里记录一下。

excel表格里面数据

1.准备工作

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

1.2 读取excel 需要的jar 包

这个在我的工程里有,大家可以去下载。

这里写图片描述

 

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

 

2.相关代码

2.1 读取excel

    /**
     * 获取 excel 表格中的数据,不能在主线程中调用
*
     * @param xlsName excel 表格的名称
* @param index   第几张表格中的数据
*/
private ArrayList<LanguageModel> getXlsData(String xlsName, int index) {
ArrayList<LanguageModel> countryList = new ArrayList<LanguageModel>();
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.e(TAG, "the num of sheets is " + sheetNum);
Log.e(TAG, "the name of sheet is  " + sheet.getName());
Log.e(TAG, "total rows is 行=" + sheetRows);
Log.e(TAG, "total cols is 列=" + sheetColumns);
for (int i = 750; i < sheetRows; i++) {
LanguageModel languageModel = new LanguageModel();
languageModel.setKey(sheet.getCell(0, i).getContents());
languageModel.setZh_value(sheet.getCell(1, i).getContents());
languageModel.setEn_value(sheet.getCell(2, i).getContents());
languageModel.setZhrTW_value(sheet.getCell(3, i).getContents());
languageModel.setIt_value(sheet.getCell(5, i).getContents());
languageModel.setDe_value(sheet.getCell(6, i).getContents());
countryList.add(languageModel);
}
//            Log.e(TAG," "+sheet.getCell(0, 0).getContents()+" "+sheet.getCell(1, 0).getContents()
//                    +" "+sheet.getCell(2, 0).getContents()+" "+sheet.getCell(3, 0).getContents()+" "
//                    +sheet.getCell(4, 0).getContents()+" "+sheet.getCell(5, 0).getContents()+" "
//                    +sheet.getCell(6, 0).getContents()+" ");
workbook.close();
} catch (Exception e) {
Log.e(TAG, "read error=" + e, e);
}
return countryList;
}
//在异步方法中 调用
private class ExcelDataLoader extends AsyncTask<String, Void, ArrayList<LanguageModel>> {
@Override
protected void onPreExecute() {
progressDialog.setMessage("加载中,请稍后......");
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.show();
}
@Override
protected ArrayList<LanguageModel> doInBackground(String... params) {
return getXlsData(params[0], 0);
}
@Override
protected void onPostExecute(ArrayList<LanguageModel> languageModels) {
if (progressDialog.isShowing()) {
progressDialog.dismiss();
}
if (languageModels != null && languageModels.size() > 0) {
//存在数据
Log.e("languageModel", " languageModels.size()=" + languageModels.size());
//                <string name="app_name">P6SPro</string>
StringBuffer languagexml = new StringBuffer();
int size = languageModels.size();
int m = size/50;
for (int i = 0; i < size; i++) {
LanguageModel languageModel = languageModels.get(i);
languagexml.append("<string name=""+languageModel.getKey()+"">"+languageModel.getEn_value()+"</string>").append("n");
//                    Log.e("languageModel", "i=" + i + "    <string name="" + languageModel.getKey() + "">" + languageModel.getEn_value() + "</string>");
}
Log.e("mylanguageModel",""+languagexml.toString());
} else {
//加载失败
}
}
}

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

2.2 相关调用

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

2.3 结果显示

这里需要注意一点:就是StringBuffer的拼接的长度最大时80行左右,多的会打印不出来,应该是app的内存不够。我使用的是每50行打印一次,然后复制后,再打印后面的50行,直到全部打印完成。

 

还有就是Excel文件必须保存为Excel2003,不然会报jxl.read.biff.BiffException: Unable to recognize OLE stream的错误。

出现这个异常是因为文件是Excel2007,而jxl解析07会报上述异常,也就是jxl可以处理Excel2003

方法:

打开文件,右上角文件另存为,选类型2003文 件,(还没试2003模版会怎样)

将导入的文件名改成现在的,试一下

 

这样就基本完成了。

下载地址:http://download.csdn.net/download/bzlj2912009596/10159401

android 读取excel数据并保存为xml文件就讲完了。

就这么简单

 

人已赞赏
Android文章

android JNI层线程回调Java函数

2020-4-8 0:18:12

Android文章

android Set的遍历

2020-4-8 1:33:05

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索