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 炖牛肉 牛肉两斤.....