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

16,632 Responses

  1. SamuelBix表示:

    prednisone 40 mg: Predni Best – cost of prednisone 10mg tablets

  2. Здесь можно сейфы для дома цены в москве домашние сейфы

  3. alkozona_pyMa表示:

    alkozona [url=https://alkozona.ru]https://alkozona.ru[/url] .

  4. I absolutely love your site.. Excellent colors & theme. Did you make this amazing site yourself? Please reply back as I’m trying to create my own website and would like to learn where you got this from or just what the theme is named. Thanks.

  5. KennethPah表示:

    where to buy clomid without prescription [url=https://clomidonpharm.com/#]clomid on pharm[/url] can i order cheap clomid pill

  6. onexbet_owEl表示:

    Получайте больше прибыли на onexbet, не отрываясь от компьютера.
    onexbet – ваш шанс на богатство, где бы вы ни находились.
    Победные ставки с onexbet, лучшие условия для игры.
    Попробуйте свою удачу вместе с onexbet, и ваша жизнь никогда не будет прежней.
    onexbet – качество и профессионализм, для вас всегда в приоритете.
    Хотите ли вы заработать крупные суммы? Вам нужен onexbet, – оптимальное решение в вашей ситуации.
    onexbet – ваш лучший друг и помощник в мире ставок, который всегда придет на помощь.
    Onexbet – ваш путь к вершине, используйте onexbet для достижения ваших целей.
    onexbet – это не просто игра, это образ жизни, которая помогает вам обогатиться.
    Готовы к большим деньгам и успеху? Попробуйте onexbet, и вы поймете, что все возможно.
    onexbet – это не просто сайт ставок, это ваша дорога к богатству, который приведет вас к желаемым результатам.
    onexbet – это идеальное место для тех, кто ищет азарт и адреналин, но при этом ценит профессионализм и конфиденциальность.
    Лучшие коэффициенты и выигрыши на onexbet, все это предоставлено для вас.
    Готовы к новым достижениям? Начните с onexbet, и вы удивитесь своим результатам.
    meghadcood https://arxbetdsrdg.com/user/meghadcood/ .

  7. Jugabet_fjPl表示:

    Jugabet casino online jugabet9.com .

  8. alkozona_owMa表示:

    alkozona [url=http://www.alkozona.ru]http://www.alkozona.ru[/url] .

  9. DanielAbice表示:

    http://amoxstar.com/# amoxicillin cost australia

  10. KennethPah表示:

    80 mg prednisone daily Predni Best prednisone medicine

  11. I blog quite often and I really thank you for your content. Your article has really peaked my interest. I will take a note of your website and keep checking for new details about once per week. I subscribed to your RSS feed too.

  12. SamuelBix表示:

    buy cipro online: CiPharmDelivery – ciprofloxacin

  13. Jugabet_nnPl表示:

    Jugabet casino m?vil [url=jugabet9.com]jugabet9.com[/url] .

  14. The following time I learn a blog, I hope that it doesnt disappoint me as a lot as this one. I imply, I know it was my choice to learn, but I actually thought youd have one thing fascinating to say. All I hear is a bunch of whining about something that you may fix should you werent too busy searching for attention.

  15. Its like you read my mind! You seem to know so much about this, like you wrote the book in it or something. I think that you could do with some pics to drive the message home a bit, but instead of that, this is wonderful blog. A great read. I’ll certainly be back.

  16. This site is mostly a walk-via for all of the data you wanted about this and didn’t know who to ask. Glimpse here, and also youi’ll undoubtedly uncover it.

  17. DanielAbice表示:

    https://prednibest.com/# prednisone 30 mg tablet

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

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

  20. Здесь можно сейф для охотничьего ружья ценагде купить сейф для ружья

  21. The French, in a panic, needed Churchill to give each accessible fighter to the air battle over France; with solely 25 squadrons remaining, Churchill refused to further assist his ally, believing that the decisive battle could be fought over Britain (the Battle of Britain began on 10 July).

  22. SamuelBix表示:

    can you buy amoxicillin over the counter: AmoxStar – amoxicillin 500mg buy online canada

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

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

  25. Здесь можно оружейные сейфы шкафыоружейные сейфы и шкафы

發佈留言

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