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

14,643 Responses

  1. There is noticeably a bundle to learn about this. I assume you made certain nice points in options also.

  2. A melhor opcao para jogos de azar Blaze

  3. I find myself lost in The words, much like one would get lost in someone’s eyes. Lead the way, I’m following.

  4. Seu cassino da sorte espera por voce Blaze

  5. Aviator_amPi表示:

    aviator game online real money aviator game online real money .

  6. Aviator_qoPi表示:

    aviator game online real money aviator game online real money .

  7. Ismaelfer表示:

    Ежегодно в течение сентября проводится Тюменский инновационный форум «НЕФТЬГАЗТЭК».
    Форум посвящен устройству мнтодов инноваторского развития областей топливно-энергетического комплекса, дискуссии а также определению заключений, созданию наилучших условий для развития инновационных проектов. Ежегодный тюменский форум представляетсобой важной дискуссионной площадкой по развитию нефтегазовой ветви в Российской Федерации, содержит большой авторитет и актуальность, созвучен корпоративной стратегии продвижения инноваторского курса в России
    -https://neftgaztek.ru/

  8. Timsothyabela表示:

    Ежегодно в середине сентября проходит Тюменский инновационный форум «НЕФТЬГАЗТЭК».
    Форум посвящен определению механизмов инновационного развития отраслей топливно-энергетического комплекса, рассмотрению а также изысканию заключений, созданию благоприятных условий для формирования инноваторских проектов. Ежегодный тюменский форум является влиятельной дискуссионной площадкой по увеличению роста нефтегазовой сферы в России, имеет высокий авторитет и актуальность, созвучен общей стратегии формирования инноваторского направления в России
    -https://neftgaztek.ru/

  9. EarnestAvada表示:

    Ежегодно в середине сентября проводится Тюменский инновационный форум «НЕФТЬГАЗТЭК».
    Форум посвящен устройству способов инновационного роста отраслей топливно-энергетического комплекса, дискуссии а также поиску ответов, созданию благоприятных условий для расчета инновационных проектов. Ежегодный тюменский форум является важной дискуссионной площадкой по увеличению роста нефтегазовой сферы в Российской Федерации, имеет высокий статус и актуальность, созвучен корпоративной стратегии продвижения инновационного курса в Российской Федерации
    -https://neftgaztek.ru/

  10. GichardPheve表示:

    Ежегодно в течение сентября проводится Тюменский инновационный форум «НЕФТЬГАЗТЭК».
    Форум посвящен определению способов инноваторского продвижения секторов топливно-энергетического комплекса, дискуссии и определению заключений, созданию благоприятных условий для формирования инновационных проектов. Ежегодный тюменский форум представляетсобой важной дискуссионной площадкой по продвижению нефтегазовой сферы в Российской Федерации, имеет большой авторитет и актуальность, созвучен корпоративной стратегии развития инноваторского курса в Российской Федерации
    -https://neftgaztek.ru/

  11. StephenDeery表示:

    Ежегодно в середине сентября организовывается Тюменский инновационный форум «НЕФТЬГАЗТЭК».
    Форум посвящен определению способов инновационного развития областей топливно-энергетического комплекса, рассмотрению и определению решений, организации благоприятных условий для формирования инновационных проектов. Ежегодный тюменский форум является авторитетной дискуссионной площадкой по развитию нефтегазовой отрасли в России, имеет большой авторитет и актуальность, созвучен корпоративной стратегии продвижения инновационного направления в России
    -https://neftgaztek.ru/

  12. OLaneevige表示:

    Ежегодно в течение сентября организовывается Тюменский инновационный форум «НЕФТЬГАЗТЭК».
    Форум посвящен развитию мнтодов инновационного роста отраслей топливно-энергетического комплекса, рассмотрению а также поиску решений, созданию наилучших обстоятельств для формирования инноваторских проектов. Ежегодный тюменский форум представляетсобой авторитетной дискуссионной площадкой по развитию нефтегазовой ветви в Российской Федерации, содержит высокий статус и своевременность, созвучен общей стратегии продвижения инновационного курса в России
    -https://neftgaztek.ru/

  13. Appreciate the clarity you bring to this topic. It’s like you’re speaking to five-year-olds, which is perfect for me.

  14. слот крейзи манки http://www.crazy-monkey-ru.ru .

  15. игра крейзи манки http://crazy-monkey-ru.ru/ .

  16. автомат crazy monkey играть https://crazy-monkey-ru.ru/ .

  17. игровой автомат crazy monkey игровой автомат crazy monkey .

  18. Your passion for this subject really shines through in your writing. It’s inspiring to see someone so enthusiastic about what they do.

  19. BrianRig表示:

    Каталог эротических рассказов https://vicmin.ru подарит тебе возможность уйти от рутины и погрузиться в мир секса и безудержного наслаждения. Обширная коллекция рассказов для взрослых разбудит твое воображение и принесет немыслимое удовольствие.

  20. Joaquincruix表示:

    купить квартиру в новостройке https://novostroyki-spb78.ru

  21. Отличный сайт! Всем рекомендую!Тут Вы можете приобрестизакись азота купить

  22. This post is a testament to The expertise and hard work. Thank you!

發佈留言

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