Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android利用HSSFWorkbook解析Excel文件

Android利用HSSFWorkbook解析Excel文件

編輯:關於Android編程

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如下:



    




PS:上面的格式沒有太對齊,修正一下

* 1 炒豆腐 豆腐三兩.....
* 2 炒青菜 青菜三顆.....
* 3 特色菜 紅燒魚 魚兒一條.....
* 4 炖羊肉 羊肉兩斤.....
* 5 炖牛肉 牛肉兩斤.....



  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved