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

  1. Профессиональный сервисный центр по ремонту бытовой техники с выездом на дом.
    Мы предлагаем: ремонт бытовой техники в мск
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  2. WilliamNeide表示:

    печать календарей стоимость печать настенных календарей

  3. KennethKex表示:

    пин ап казино: пин ап казино – пин ап казино

  4. Mauricebob表示:

    печать плакатов спб https://pechat-plakatov-spb.ru

  5. BrianStani表示:

    pinup az: pin up casino – pin up

  6. KeithNes表示:

    этот контент Купить мяу

  7. TimothyFup表示:

    перенаправляется сюда

    the dog house slot

  8. Randallsen表示:

    over at this website Lookup SSN

  9. Elmerbuils表示:

    вавада казино: vavada casino – vavada вход

  10. KennethKex表示:

    пин ап казино: пин ап казино – пин ап вход

  11. BrianStani表示:

    vavada casino: вавада – вавада казино

  12. Olivetus表示:

    профиль с подписчиками аккаунты с балансом

  13. Vernonneato表示:

    Say hello to Phoenix TradeтАФthe Solana-native DEX designed for serious traders. Whether you’re using Phoenix Trade App, earning through Phoenix Trade Staking, or exploring the Phoenix Trade Token, itтАЩs all optimized for speed and transparency. From real-time Phoenix Trade Volume to community access on Phoenix Trade Discord, everythingтАЩs built with you in mind. New to the platform? Follow the Phoenix Trade Guide and unlock more with the Phoenix Trade Airdrop. Join the movement now at https://phoenixtrade.me !

  14. Jacobnug表示:

    офсетная печать буклетов печать рекламных буклетов

  15. Eugenebic表示:

    печать на тканевых лентах печать этикеток на ленте

  16. Richardmitty表示:

    nba線上看
    隨著2024-25賽季NBA附加賽的火熱進行,球迷們的熱情也隨之高漲。每一場比賽都關乎球隊命運,而季後賽的激烈對決更是指日可待。對於忠實球迷來說,能夠即時觀看這些精彩賽事至關重要。NBA直播線上看服務應運而生,為球迷提供了便捷的觀賽體驗。無論是上班族抽空追賽,還是學生族群熬夜支持,都能通過手機、平板或電腦隨時隨地觀看比賽。高清畫質、專業解說和多角度回放,讓您仿佛置身現場,感受每一次扣籃和三分球帶來的震撼。除了賽事直播,許多平台還提供賽程表、球員數據和賽後分析等豐富內容。您可以輕鬆掌握各隊積分排名、明星球員表現,甚至深入了解戰術分析。對於喜愛運彩投注的朋友,即時的數據分析和專家預測也能成為您決策的重要參考。選擇可靠的NBA直播平台尤為重要。穩定的播放品質、低延遲的直播信號和完整的賽事覆蓋,都是評判標準。部分平台還提供會員專屬服務,如廣告免除、賽事回放和獨家內容等特權。隨著科技發展,NBA直播線上看服務不斷創新,為球迷帶來更加便捷、沉浸的觀賽體驗。不再受限於電視轉播,每一位球迷都能隨心所欲地追逐熱愛的籃球賽事,見證精彩時刻。

  17. Elmerbuils表示:

    pin-up casino giris: pin up casino – pin-up casino giris

  18. ZackaryGer表示:

    https://pinuprus.pro/# пинап казино

  19. Elmerbuils表示:

    pin up casino: pinup az – pin up az

  20. Richardfek表示:

    pinup az pin up pin up azerbaycan

  21. KennethKex表示:

    pin up casino: pin up azerbaycan – pin-up casino giris

  22. BrianStani表示:

    пин ап вход: пин ап вход – пин ап вход

  23. Richardfek表示:

    вавада зеркало vavada вавада официальный сайт

  24. Elmerbuils表示:

    пин ап казино официальный сайт: пин ап зеркало – pin up вход

  25. RobertApozy表示:

    взять займ – кредит, смотреть фильмы онлайн

發佈回覆給「сервис центры в москве」的留言 取消回覆

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