透過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...

17,928 Responses

  1. Making hard to understand concepts readable is no small feat. It’s like you know exactly how to tickle my brain.

  2. KennethPah表示:

    cipro for sale buy cipro without rx buy ciprofloxacin

  3. RobertJar表示:

    amoxil pharmacy: amoxicillin 800 mg price – where to buy amoxicillin

  4. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали срочный ремонт стиральных машин siemens, можете посмотреть на сайте: ремонт стиральных машин siemens адреса
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  5. нарколог вывод из запоя [url=http://www.zarabotokdoma.creartuforo.com/viewtopic.php?id=11494]нарколог вывод из запоя [/url] .

  6. Hello! I could have sworn I’ve been to this site before but after browsing through some of the articles I realized it’s new to me. Anyhow, I’m certainly pleased I stumbled upon it and I’ll be book-marking it and checking back often.

  7. Здесь можно купить сейф для пистолетакупить сейф с доставкой в москве

  8. DanielAbice表示:

    http://cipharmdelivery.com/# ciprofloxacin 500mg buy online

  9. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт стиральных машин siemens, можете посмотреть на сайте: ремонт стиральных машин siemens цены
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  10. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт стиральных машин siemens в москве, можете посмотреть на сайте: ремонт стиральных машин siemens
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  11. Mostbet PL表示:

    I’m curious to find out what blog platform you are using? I’m having some minor security problems with my latest site and I’d like to find something more safeguarded. Do you have any suggestions?

  12. SamuelBix表示:

    buy amoxicillin without prescription: buy amoxicillin canada – purchase amoxicillin online

  13. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт стиральных машин siemens, можете посмотреть на сайте: ремонт стиральных машин siemens в москве
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  14. DanielAbice表示:

    https://amoxstar.com/# amoxicillin 500mg buy online canada

  15. Gregorysuify表示:

    The 1xBet promo code 2025: 1XNEW25. Use to register a new member, get a sports bonus 100% up to €130 and casino bonus €1950 + 150 free spins. Use the bonus code when registering and you are guaranteed to receive a 2025 welcome bonus from 1xBet. The 1xBet bookmaker has proven itself to be time-tested, it has high odds for sports betting, and a huge number of slots in the cauldron section, there are also roulette, poker, and fast online games like Aviator.

    https://edicionesdelau.com/articles/promo_code_for_32.html – 1xbet promo code india

  16. KennethPah表示:

    prednisone for sale [url=http://prednibest.com/#]buying prednisone mexico[/url] prednisone 10 mg tablet

  17. I used to be able to find good info from your content.

  18. The post has been incredibly helpful. Thank you for the guidance!

  19. SamuelBix表示:

    can you get generic clomid pills: clomid generics – where can i buy clomid without rx

  20. KennethPah表示:

    cost of amoxicillin antibiotic amoxicillin generic amoxicillin cost

  21. A masterpiece of writing—you’ve covered all bases with such finesse, I’m left wanting an encore.

  22. Very good post. I am going through many of these issues as well..

  23. DanielAbice表示:

    https://cipharmdelivery.com/# ciprofloxacin generic

  24. Incredibly helpful post, like a GPS for my lost thoughts.

  25. никто чат [url=https://anonimnyj-chat11.ru/]никто чат[/url] .

發佈留言

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