MainActivity如下:
package cc.textexcel; import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import android.app.Activity; import android.os.Bundle; /** * Demo描述: 利用HSSFWorkbook解析Excel文件 * * 注意两个问题: * 1 关于行的理解. * 以表格中最左侧的行数作为标准.数字是几,其对应的为第几行. * 最终数字有多大,即代表有多少行. * * 2 关于单元格合并的问题,如下的形式 * * 1 炒豆腐 豆腐三两..... * 2 炒青菜 青菜三颗..... * 3 特色菜 红烧鱼 鱼儿一条..... * 4 炖羊肉 羊肉两斤..... * 5 炖牛肉 牛肉两斤..... * * 此处有五行数据,他们都属于特色菜. * 但是我们要注意在解析此Excel的时候,只有第一行的第一个Cell里面可以取到 * 我们想要的"特色菜"这个菜系!!!!! * 其他行是取到的只是空.要注意这个问题 */ public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); new Thread() { public void run() { parseExcel(); }; }.start(); } private void parseExcel() { HSSFWorkbook hssfWorkbook = null; try { POIFSFileSystem poifsFileSystem = new POIFSFileSystem(getResources().getAssets().open("test.xls")); hssfWorkbook = new HSSFWorkbook(poifsFileSystem); } catch (IOException e) { e.printStackTrace(); } //从工作簿中取出第一张Excel HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(0); //从第三行开始解析,第一二行是表头,不是业务所需数据 int rowIndex = 2; String caixiForRows = ""; HSSFRow hssfRow = hssfSheet.getRow(rowIndex); HSSFCell hssfCell = null; while ((hssfRow != null) && (hssfRow.getCell(1) != null)) { //保存每一行中各字段对应的数据 String[] rowDataArray = { "", "", "", "", "", "", "" }; //获取该行中第一个单元格,以便得到菜系 hssfCell = hssfRow.getCell(0); if (hssfCell != null) { String caixiTemp = hssfCell.getStringCellValue(); if (caixiTemp != null&&caixiTemp.trim().length()>=1) { System.out.println("菜系那里,所合并单元格的第一行,可得到菜系"); //获得菜系后将对应值保存到caixiForRows caixiForRows= caixiTemp; }else{ System.out.println("菜系那里,所合并单元格除第一行以外的其他行"); } } rowDataArray[0] = caixiForRows; //得到菜系后,继续后面的单元格. //其后的单元格均没有合并操作,所以方便操作 int cellIndex = 1; hssfCell = hssfRow.getCell(cellIndex); while ((hssfCell != null) && (hssfCell.toString().length()> 0)) { hssfCell = hssfRow.getCell(cellIndex); rowDataArray[cellIndex] = hssfCell.getStringCellValue(); cellIndex++; hssfCell = hssfRow.getCell(cellIndex); } //至此完成一行的操作.准备进入下一行的解析. rowIndex++; hssfRow = hssfSheet.getRow(rowIndex); System.out.println(rowDataArray[0]+" "+rowDataArray[1]+" "+rowDataArray[2]+" "+rowDataArray[3] +" "+rowDataArray[4]+" "+rowDataArray[5]+" "+rowDataArray[6]); } } }
main.xml如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="利用HSSFWorkbook解析Excel文件" android:layout_centerInParent="true" /> </RelativeLayout>
PS:上面的格式没有太对齐,修正一下
* 1 炒豆腐 豆腐三两.....
* 2 炒青菜 青菜三颗.....
* 3 特色菜 红烧鱼 鱼儿一条.....
* 4 炖羊肉 羊肉两斤.....
* 5 炖牛肉 牛肉两斤.....