透過Java解析Excel檔案

也是一個工作中遇到的情境,很多單位想讓內部人員利用Excel維護資料(因為維護上比較簡單方便),且想讓這份資料透過網頁呈現給一般網友閱讀,所以整體後端的流程應該是:

  1. 將維護的Excel透過網頁介面上傳
  2. 將上傳的Excel轉換成XML
  3. 網頁去讀取這份XML來呈現

透過以上的三個步驟,就可以完成客戶想要效果。

本範例展示的是讀取Excel的XLS格式(新版Excel為XLSX格式),並轉換成陣列的方法(寫入XML在前面的範例就有了),我們選用讀取Excel的Library是Apache POI,而檔內已經有以下的資料,其中Total是公式欄位,計算Price x Quantity:

IDNamePriceQuantityTotal
100001產品名稱110550
100002產品名稱22010200
100003產品名稱33015450

以下是讀取的程式範例:

package CDIT.stanley;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
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;


public class excelToXMLFullSample {
	
	static ArrayList<ArrayList<String>> excelData = new ArrayList<ArrayList<String>>();
	
	public static void main (String[] args) throws FileNotFoundException{
		
		excelData.clear();
	    
	    String xlsPath = "C:\\Projects\\Javas\\sample.xls";
	    InputStream inputStream = null;
	    inputStream = new FileInputStream (xlsPath);
		POIFSFileSystem fileSystem = null;
	    try {
	        fileSystem = new POIFSFileSystem (inputStream);
			@SuppressWarnings("resource")
			HSSFWorkbook workBook = new HSSFWorkbook (fileSystem);
	        HSSFSheet sheet = workBook.getSheetAt (0);
	        Iterator<?> rows = sheet.rowIterator ();
	        
	        while (rows.hasNext ()){
	            HSSFRow row = (HSSFRow) rows.next();
	            Iterator<?> cells = row.cellIterator ();

	            ArrayList<String> rowData = new ArrayList<String>();
	            
	            while (cells.hasNext ()){
	                HSSFCell cell = (HSSFCell) cells.next();
	                
	                switch (cell.getCellTypeEnum()){
		                case STRING :{
		                    rowData.add(cell.getStringCellValue());
		                    break;
		                }
		                case NUMERIC : {
		                    rowData.add((int)cell.getNumericCellValue() + "");
			                break;
		                }
		                case FORMULA :{
		                	switch(cell.getCachedFormulaResultTypeEnum()) {
			                    case STRING:
			                    	rowData.add(cell.getStringCellValue ());
			                        break;
			                    case NUMERIC:
			                    	rowData.add((int)cell.getNumericCellValue() + "");
			                        break;
					default:
						rowData.add("");
						break;
		                	}
		                }		                
			default:
				rowData.add("");
				break;
	                }
	            }
	            excelData.add(rowData);
	        }
	    } catch(IOException e){
	        System.out.println("IOException " + e.getMessage());
	        System.out.println("轉換失敗,請檢查Excel檔案與格式是否正確");
	    }
	    for(int i=0 ; i<excelData.size(); i++){
	    	System.out.println("Excel Row "+ i +" Data : " + excelData.get(i));
	    }
	    
	}
}

程式會把Excel內的資料轉換為ArrayList,輸出內容如下:

Excel Row 0 Data : [Product ID, Product Name, Product Price, Quantity, Total]
Excel Row 1 Data : [100001, 產品名稱1, 10, 5, 50, ]
Excel Row 2 Data : [100002, 產品名稱2, 20, 10, 200, ]
Excel Row 3 Data : [100003, 產品名稱3, 30, 15, 450, ]

You may also like...

27,054 Responses

  1. BrandonJag表示:

    zithromax prescription in canada: ZithroPharm – zithromax 500 price

  2. Roberttic表示:

    https://doxhealthpharm.com/# doxycycline uk pharmacy

  3. Briantrozy表示:

    zithromax over the counter uk: buy zithromax online fast shipping – how to get zithromax

  4. Roberttic表示:

    https://clmhealthpharm.shop/# how to get generic clomid price

  5. Briantrozy表示:

    purchase amoxicillin online without prescription: Amo Health Pharm – buy amoxicillin online with paypal

  6. El codigo promocional 1xBet 2025: “1XBUM” brinda a los nuevos usuarios un bono del 100% hasta $130. Ademas, el codigo promocional 1xBet de hoy permite acceder a un atractivo bono de bienvenida en la seccion de casino, que ofrece hasta $2275 USD (o su equivalente en VES) junto con 150 giros gratis. Este codigo debe ser ingresado al momento de registrarse en la plataforma para poder disfrutar del bono de bienvenida, ya sea para apuestas deportivas o para el casino de 1xBet. Los nuevos clientes que se registren utilizando el codigo promocional tendran la oportunidad de beneficiarse de la bonificacion del 100% para sus apuestas deportivas.

    1xCasino argentina

  7. 347939 393436Its wonderful what supplementing can do for your body and your weight lifting goals! 889745

  8. BrandonJag表示:

    amoxicillin without prescription: Amo Health Pharm – amoxicillin 500mg cost

  9. JustinTam表示:

    buy zithromax 1000mg online: ZithroPharm – zithromax drug

  10. I have discovered that costs for internet degree specialists tend to be a terrific value. Like a full 4-year college Degree in Communication with the University of Phoenix Online consists of 60 credits with $515/credit or $30,900. Also American Intercontinental University Online comes with a Bachelors of Business Administration with a entire course element of 180 units and a price of $30,560. Online studying has made getting your college diploma so much easier because you can earn the degree in the comfort of your house and when you finish from office. Thanks for all the other tips I have really learned from your site.

  11. VirgilBlawl表示:

    cost of amoxicillin 30 capsules AmoHealthPharm buy amoxicillin online with paypal

  12. JustinTam表示:

    amoxicillin where to get: amoxicillin capsule 500mg price – cheap amoxicillin 500mg

  13. JustinTam表示:

    doxycycline purchase: doxycycline canadian pharmacy – buy doxycycline 100mg

  14. Roberttic表示:

    https://doxhealthpharm.shop/# doxycycline canadian online pharmacy

  15. Briantrozy表示:

    can you buy doxycycline over the counter in canada: doxycycline 300 mg cost – buy generic doxycycline

  16. Roberttic表示:

    http://zithropharm.com/# zithromax 1000 mg pills

  17. Briantrozy表示:

    buying cheap clomid without dr prescription: where can i buy clomid pills – can i buy clomid no prescription

  18. VirgilBlawl表示:

    zithromax price south africa zithromax antibiotic zithromax online usa

  19. Roberttic表示:

    http://doxhealthpharm.com/# cost of doxycycline australia

  20. Briantrozy表示:

    buy doxycycline online canada: buy online doxycycline – buy doxycycline 100mg online india

  21. JustinTam表示:

    where can i buy cheap clomid online: cost generic clomid without insurance – can you get generic clomid prices

  22. Roberttic表示:

    https://doxhealthpharm.com/# doxycycline 100mg capsules buy

  23. JustinTam表示:

    zithromax 500 without prescription: Zithro Pharm – zithromax capsules

  24. Nonetheless, most of the time, high yield funding opportunities create the wealth for investors quite than the average bank deposits and bond devices.

  25. JustinTam表示:

    doxy: doxycycline 400 mg – cost of doxycycline in canada

  26. Roberttic表示:

    https://clmhealthpharm.com/# can i order cheap clomid without a prescription

  27. Briantrozy表示:

    cost of clomid: how to buy clomid for sale – buying generic clomid without insurance

  28. Briantrozy表示:

    doxycycline tablets 100mg: doxycycline 100mg best buy – doxycycline order uk

  29. BrandonJag表示:

    amoxicillin 500mg prescription: where to buy amoxicillin pharmacy – amoxicillin discount coupon

發佈回覆給「Roberttic」的留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。