android poi读写,Android 使用poi解析XLS文件【原创】

项目需求,需要解析Excel的xls文件,网上的资料大都是jxl与poi,权衡之下选择了poi进行解析。

1.首先去下载poi的jar包,CSDN上的资源很多,自行下载

2015-01-21_093205.jpg

2.编辑好Excel的xls文件放入SD卡

3.进行代码解析,上代码:

/**

* 获得单元格中的内容

*

@param cell

@return

*/

private Object getCellString(HSSFCell cell) {

Object result = null;

if (cell != null) {

int cellType = cell.getCellType();

switch (cellType) {

case HSSFCell.CELL_TYPE_STRING:

result = cell.getRichStringCellValue().getString();

break;

case HSSFCell.CELL_TYPE_NUMERIC:

// result = cell.getNumericCellValue();

DecimalFormat df = new DecimalFormat("0");    //防止变成科学计数法,强制转换

result = df.format(cell.getNumericCellValue());

break;

case HSSFCell.CELL_TYPE_FORMULA:

result = cell.getNumericCellValue();

break;

case HSSFCell.CELL_TYPE_ERROR:

result = null;

break;

case HSSFCell.CELL_TYPE_BOOLEAN:

result = cell.getBooleanCellValue();

break;

case HSSFCell.CELL_TYPE_BLANK:

result = null;

break;

}

}

return result;

}

/**

* 获取表中数据

@param workbook HSSFWorkbook对象

@param sheetNumber  表格索引(EXCEL 是多表文档,所以需要输入表索引号)

@return 由LIST构成的行和列

@throws FileNotFoundException

@throws IOException

*/

public List getDatasFromSheet(HSSFWorkbook workbook, int sheetNumber)

throws FileNotFoundException, IOException {

List result = new ArrayList();

// 获得指定的表

HSSFSheet sheet = workbook.getSheetAt(sheetNumber);

// 获得数据总行数

int rowCount = sheet.getLastRowNum();

if (rowCount 

return result;

}

// 逐行读取数据

for (int rowIndex = 0; rowIndex <= rowCount; rowIndex++) {

// 获得行对象

HSSFRow row = sheet.getRow(rowIndex);

if (row != null) {

List rowData = new ArrayList();

// 获得本行中单元格的个数

int columnCount = row.getLastCellNum();

// 获得本行中各单元格中的数据

for (short columnIndex = 0; columnIndex 

@SuppressWarnings("deprecation")

HSSFCell cell = row.getCell(columnIndex);

// 获得指定单元格中数据

Object cellStr = getCellString(cell);

rowData.add(cellStr);

}

result.add(rowData);

}

}

return result;

}

/**

* 解析XLS文件任务

@author Robin

*  time 2015-01-19 14:40:59

*

*/

private class ParseXlsFileTask extends AsyncTask>{

@Override

protected List doInBackground(String... params) {

String fileName=params[0];

try {

HSSFWorkbook workbook = new HSSFWorkbook(

new FileInputStream(fileName));

List objects=getDatasFromSheet(workbook,0);

LogUtils.i("解析结果:"+objects.toString());

return objects;

catch (FileNotFoundException e) {

e.printStackTrace();

return null;

catch (IOException e) {

e.printStackTrace();

return null;

}

}

@Override

protected void onPreExecute() {

DialogUtils.showAlertDialog(progressDialog);

super.onPreExecute();

}

@Override

protected void onPostExecute(List result) {

DialogUtils.DismissProgressDialog(progressDialog);

if (!ListUtils.isEmpty(result)) {

onParseXLSListener.onParseXLSSuccess(result);

}

super.onPostExecute(result);

}

}

/**

* 设置解析XLS文件回调接口

@param onParseXLSListener

*/

public void setOnParseXLSListener(OnParseXLSListener onParseXLSListener){

this.onParseXLSListener=onParseXLSListener;

}

4.调用的时候传入xls文件的路径:

String fileName = xlsDatas.get(position).getXlsPath();

new ParseXlsFileTask().execute(fileName);  //执行XLS文件解析任务解析

以上代码要注意的是,xls文件表格中如果有较长的数字的话,不管是什么类型,poi都会解析成double类型的数字,会以科学计数法显示,对这种情况需要强制转化一下

DecimalFormat df = new DecimalFormat("0");    //防止变成科学计数法,强制转换

result = df.format(cell.getNumericCellValue());

至此,解析目的达成。

转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/6934.html

75d087ef9a9fb11dc373caaf33adbf7f.png

微信打赏

支付宝打赏

感谢您对作者wangbin的打赏,我们会更加努力!    如果您想成为作者,请点我

android 使用poi读取高版本excel, 解决以下这两个错误 java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/xml/stream/XMLEventFactory; at org.apache.poi.openxml4j.opc.internal.marshallers.PackagePropertiesMarshaller.(PackagePropertiesMarshaller.java:41) at org.apache.poi.openxml4j.opc.OPCPackage.init(OPCPackage.java:161) at org.apache.poi.openxml4j.opc.OPCPackage.(OPCPackage.java:141) at org.apache.poi.openxml4j.opc.ZipPackage.(ZipPackage.java:97) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:324) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:184) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:149) javax.xml.stream.FactoryConfigurationError: Provider com.sun.xml.internal.stream.events.XMLEventFactoryImpl not found at javax.xml.stream.FactoryFinder.newInstance(Unknown Source) at javax.xml.stream.FactoryFinder.newInstance(Unknown Source) at javax.xml.stream.FactoryFinder.find(Unknown Source) at javax.xml.stream.FactoryFinder.find(Unknown Source) at javax.xml.stream.XMLEventFactory.newInstance(Unknown Source) at org.apache.poi.openxml4j.opc.internal.marshallers.PackagePropertiesMarshaller.(PackagePropertiesMarshaller.java:41) at org.apache.poi.openxml4j.opc.OPCPackage.init(OPCPackage.java:161) at org.apache.poi.openxml4j.opc.OPCPackage.(OPCPackage.java:141) at org.apache.poi.openxml4j.opc.ZipPackage.(ZipPackage.java:97) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:324) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:184) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:149)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值