透過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,083 Responses

  1. MatthewMof表示:

    amoxicillin cost australia Amo Health Care amoxicillin 500 tablet

  2. MatthewMof表示:

    where buy clomid without dr prescription how to get clomid without prescription where buy clomid no prescription

  3. RussellCof表示:

    amoxicillin 875 mg tablet: amoxicillin 500 mg where to buy – Amo Health Care

  4. Can I simply just say what a relief to find someone who actually knows what they are discussing on the net. You definitely understand how to bring an issue to light and make it important. More people must check this out and understand this side of the story. It’s surprising you aren’t more popular since you surely possess the gift.

  5. Judsonrax表示:

    Amo Health Care: amoxicillin capsule 500mg price – Amo Health Care

  6. Rogerbup表示:

    https://amohealthcare.store/# Amo Health Care

  7. RaymondVal表示:

    Свежие тенденции https://www.life-ua.com советы по стилю и обзоры коллекций. Всё о моде, дизайне, одежде и аксессуарах для тех, кто хочет выглядеть современно и уверенно.

  8. RussellCof表示:

    Amo Health Care: Amo Health Care – buy amoxicillin without prescription

  9. RussellCof表示:

    can you get generic clomid prices: Clom Health – can i purchase clomid without rx

  10. gk88表示:

    Having read this I thought it was rather enlightening. I appreciate you finding the time and effort to put this content together. I once again find myself spending a lot of time both reading and posting comments. But so what, it was still worth it.

  11. MatthewMof表示:

    how can i get prednisone online without a prescription PredniHealth prednisone 1 tablet

  12. MatthewMof表示:

    Amo Health Care amoxicillin in india Amo Health Care

  13. MatthewMof表示:

    buying clomid without rx can you get clomid tablets can you get cheap clomid without rx

  14. RussellCof表示:

    Amo Health Care: Amo Health Care – amoxicillin discount coupon

  15. FrancisJup表示:

    Свежие тенденции https://www.life-ua.com советы по стилю и обзоры коллекций. Всё о моде, дизайне, одежде и аксессуарах для тех, кто хочет выглядеть современно и уверенно.

  16. RobertoPaw表示:

    Vibracion de motor
    ¡Comercializamos sistemas de balanceo!
    Somos creadores directos, manufacturando en tres ubicaciones diferentes: España, Argentina y Portugal.

    Nuestros equipos son de excelente calidad, y como no somos vendedores, sino fabricantes, nuestro coste es inferior que el de otras marcas.

    Enviamos a todos los países, revise la descripción de nuestros sistemas de balanceo en nuestra web.

    El dispositivo de balanceo es portátil, liviano, lo que le permite ajustar el equilibrio de todo tipo de rotores en cualquier entorno.

  17. OscarSeelo表示:

    personal loan in Nigeria
    Get a quick loan in Nigeria in 2 Minutes. Migo helps small businesses extend low-interest, no collateral micro loans, banking services and credit purchase to their customers. With Migo’s microlending APIs, SMEs, FinTechs, Banks, Telcos and Retailers in Nigeria can support their customers with:

    1. Access to required loan amounts at the point of need

    2. Low interest rates on quick loans and credit products

    3. Flexible and easy repayment options

    4. Personalized financial services and products across website, mobile app, USSD, SMS, ATM, POS, Whatsapp, Facebook, Twitter and Instagram

  18. www stake.us表示:

    Aw, this was an exceptionally good post. Spending some time and actual effort to produce a great article… but what can I say… I put things off a lot and don’t seem to get anything done.

  19. Rogerbup表示:

    http://prednihealth.com/# prednisone 5mg capsules

  20. RobertRef表示:

    online Cialis pharmacy: online Cialis pharmacy – discreet shipping ED pills

  21. RobertRef表示:

    modafinil legality: modafinil 2025 – buy modafinil online

  22. JeremyMelty表示:

    modafinil pharmacy: legal Modafinil purchase – modafinil pharmacy

  23. Thanks for your suggestions. One thing I’ve noticed is banks along with financial institutions really know the spending habits of consumers as well as understand that most people max out their real credit cards around the trips. They wisely take advantage of that fact and begin flooding the inbox as well as snail-mail box with hundreds of no-interest APR credit cards offers shortly when the holiday season concludes. Knowing that in case you are like 98 of the American community, you’ll jump at the one opportunity to consolidate financial debt and shift balances for 0 APR credit cards.

  24. KennethLar表示:

    ссылка на сайт tripscan21 win

  25. LorenzoLiate表示:

    legit Viagra online Viagra without prescription fast Viagra delivery

發佈回覆給「alpha tonic official website」的留言 取消回覆

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