生活随笔
收集整理的這篇文章主要介紹了
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 读取excel数据并保存为xml文件的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。