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

  1. I’m always excited to see The posts in my feed. Another excellent article!

  2. RobertJar表示:

    ciprofloxacin over the counter: cipro pharmacy – buy cipro online canada

  3. SamuelBix表示:

    cipro: cipro ciprofloxacin – buy cipro online

  4. onexbet_wrot表示:

    Лучший выбор для ставок – onexbet, ставки с onexbet – это успех|Профессиональные прогнозы от onexbet, большие деньги ждут вас|Защитите свои деньги с onexbet, зарабатывайте без стресса|Бонусы и акции от onexbet, участвуйте в акциях и выигрывайте|Большой выбор азартных игр на onexbet, выигрывайте крупные суммы в удобном формате|Быстрые выплаты на onexbet, получите свои деньги моментально|Легальное онлайн казино onexbet, ваша безопасность – важнее всего|Смотрите спорт в прямом эфире на onexbet, прогнозируйте и побеждайте онлайн|Участвуйте в уникальных акциях onexbet, получите возможность выиграть дополнительные призы|Играйте с живыми дилерами на onexbet, ощутите атмосферу настоящего казино|Следите за результатами на onexbet, получайте прибыль от своих прогнозов|Увеличьте свой капитал с onexbet, ставьте на успешных букмекеров|Лучшие коэффициенты и выигрыши на onexbet, играйте и побеждайте с onexbet|Онлайн поддержка пользователей на onexbet, гарантия качественного обслуживания|Легкость использования и простота на onexbet, получайте удовольствие от азарта с onexbet|Увеличьте свои шансы на миллион с onexbet, ставьте и получайте крупные выигрыши|Зарабатывайте на ставках с onexbet, играть и выигрывать стало проще|Персональный коэффициент успеха на onexbet, получайте индивидуальные предложения и бонусы|Ставьте и зарабатывайте вместе с нами, делайте прогнозы и получайте прибыль|Профессиональная букмекерская контора onex
    onexbet app onexbet app .

  5. текстовой чат [url=www.anonimnyj-chat11.ru]текстовой чат[/url] .

  6. анонимный чат знакомств анонимный чат знакомств .

  7. RobertJar表示:

    can you buy generic clomid no prescription: cost of generic clomid without insurance – where to buy cheap clomid without rx

  8. Good post! We will be linking to this particularly great article on our website. Keep up the great writing.

  9. KennethPah表示:

    where to buy generic clomid without insurance [url=http://clomidonpharm.com/#]clomidonpharm[/url] where buy generic clomid price

  10. William Franklin was the final colonial Governor of latest Jersey (1763-1776), and a steadfast Loyalist throughout the American Revolutionary Conflict.

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

  12. After I originally commented I appear to have clicked on the -Notify me when new comments are added- checkbox and from now on every time a comment is added I get 4 emails with the same comment. Is there a way you are able to remove me from that service? Appreciate it.

  13. Through the press conference, Nepomniachtchi expressed regret over his play, particularly within the classical portion of the match.

  14. In the first full-displaying of the exhibit at the 98 Greene Street Loft, the images were put in on boards in sequential rows as Mayer’s seven-hour audio observe played a single time between the gallery’s open and shut.

  15. KennethPah表示:

    prednisone rx coupon Predni Best prednisone for sale without a prescription

  16. These piezolytes give the proteins the flexibility they should function correctly below nice strain.

  17. SamuelBix表示:

    average price of prednisone: Predni Best – buy prednisone without a prescription best price

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

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

  20. DanielAbice表示:

    https://cipharmdelivery.com/# buy cipro online usa

  21. 2017’s Gayo Daejeon befell on 25 December at Gocheok Sky Dome.

  22. In contrast to the Jedi, who primarily use blue and green lightsabers, the same old colour for a Sith lightsaber is crimson, born of an unnatural corruption of the kyber crystal by means of the dark facet’s malignancy, inflicting it to “bleed”.

  23. McKeand, Kirk (August 24, 2016).

發佈留言

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