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

25,834 Responses

  1. DouglasHoapy表示:

    Fonbet промокод при регистрации https://fly-inform.ru/news/aktualnuy_promokod_fonbet_pri_registracii.html
    Промокод Fonbet при регистрации предоставляет новым пользователям приветственные бонусы. Например, промокод ‘GIFT200’ активирует бесплатные ставки или другие награды. Ввод этого промокода в специальное поле при регистрации помогает новым игрокам успешно начать игру и увеличить свои шансы на выигрыш.

  2. Abrahamwarne表示:

    naltrexone river pharmacy: online pharmacy brand viagra – online pharmacy rx

  3. running man 3表示:

    I do not even understand how I ended up here, but I thought this post was once great. I don’t realize who you are however certainly you’re going to a famous blogger should you aren’t already 😉 Cheers!

  4. Abrahamwarne表示:

    swiss pharmacy finpecia: Starlix – pantoprazole pharmacy

  5. Abrahamwarne表示:

    value rx pharmacy tazewell tn: can you buy viagra at pharmacy – us online pharmacy cialis

  6. Thanks a lot for your post. I want to write my opinion that the tariff of car insurance varies widely from one insurance policy to another, for the reason that there are so many different facets which bring about the overall cost. For example, the brand name of the car or truck will have a tremendous bearing on the fee. A reliable older family vehicle will have a lower priced premium compared to a flashy fancy car.

  7. Eltonwag表示:

    однодневный ретрит https://ретриты.рф

  8. Wcrfonert表示:

    Murray’s Natural Living MagazineYou’ve Heard Gratitude Is Good For You.
    Take the time to shop around when you want to stopping lexapro after 1 week at economical prices if you purchase from trusted online
    If one or more of your family members such as a parent or sibling have been diagnosed with bowel cancer before the age of 55, it may run in your family.

  9. Отличный сайт! Всем рекомендую!картина на холсте в Тюмени

  10. JacobGed表示:

    Apres le paiement, le promo de morue 1xbet devient disponible et peut etre active par le joueur a tout moment. Il y a beaucoup d’offres dans la vitrine des codes promotionnels. Dans la plupart des cas, ils couvrent la section du casino, mais souvent dans la vitrine sont publies des codes interessants pour la Conclusion a des conditions preferentielles des Paris Express, pour obtenir un cashback pour les Paris perdus. La vitrine est mise a jour assez souvent.

  11. Easydrorbix表示:

    sky pharmacy: mexican pharmacy seroquel – pharmacy rx one coupon code

  12. Eltonwag表示:

    ретрит на природе https://ретриты.рф

  13. Sazryop表示:

    Купить диплом старого образца, можно ли это сделать по быстрой схеме?
    samanalevi.com.tr/read-blog/238

  14. Sazrvbg表示:

    Приобретение диплома ПТУ с сокращенной программой обучения в Москве
    true.pahom.su/2024/08/23/neobhodimo-priobresti-diplom-posetite-luchshiy-onlayn-magazin

  15. Lazrimz表示:

    Привет!
    Мы изготавливаем дипломы любых профессий по приятным ценам.
    web-lance.net/forums.php?m=posts&q=27248&n=last

  16. Eltonwag表示:

    ретрит перезагрузка https://ретриты.рф

  17. Eltonwag表示:

    ретрит октябрь 2024 https://ретриты.рф

  18. Drstobeese表示:

    irmat pharmacy: super saver pharmacy – cabergoline online pharmacy

  19. капельница на дому от запоя https://kapelnica-ot-zapoya-kolomna11.ru/ .

  20. Отличный сайт! Всем рекомендую!портрет на холсте в Тюмени

  21. AntnPaish表示:

    The intestines can keep working even though a cancer has started in one part of it.
    best prices can be located by making use of online promotions to contraction alkalosis lasix at the lowest price
    Critical Care 11 3 : R54.

  22. Если вы искали где отремонтировать сломаную технику, обратите внимание – сервисный центр в челябинске

  23. Если вы искали где отремонтировать сломаную технику, обратите внимание – ремонт бытовой техники

  24. WilliamGed表示:

    Ou trouver le активный промокод 1хбет?
    Les codes promotionnels actuels 1xBet sont distribues sur Internet via des ressources partenaires, via les reseaux sociaux, via des blogueurs populaires. Les clients reguliers du bureau peuvent recevoir des codes promotionnels a la suite de la diffusion par e-mail ou par le biais de la «vitrine des codes promotionnels».

  25. CharlieGed表示:

    Offre speciale бесплатные промокоды в 1хбет на сегодня vous offre une remise de 100% sur le montant total de votre premier depot jusqu’a 100$, bien entendu, dans votre devise locale. Profitez-en facilement en saisissant le code promotionnel lors de votre inscription et recevez un bonus sur 1xbet.com.

  26. Easydrorbix表示:

    online pharmacy with doctor consultation: botox online pharmacy – viagra from tesco pharmacy

  27. Eanrcna表示:

    Привет!
    Мы можем предложить дипломы любой профессии по приятным тарифам.
    lespilomaterial.ru

  28. Eltonwag表示:

    ретрит туры по россии https://ретриты.рф

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

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