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

  1. Charleselila表示:

    buy prednisone online without a prescription: cheapest prednisone no prescription – where can i buy prednisone without a prescription

  2. DichaelDax表示:

    официальный сайт bitz casino
    регистрация битц казино

  3. RamonGaw表示:

    Качественное написание курсовой работы https://reshayubystro.ru/ на заказ. Низкие цены и антиплагиат от 70%. Точно в срок. Гарантия высокой оценки, бесплатные доработки.

  4. Shaneevige表示:

    leon casino регистрация
    сайт leon casino

  5. Billyved表示:

    http://prednisoned.online/# cheapest prednisone no prescription

  6. Charleselila表示:

    buy doxycycline for dogs: where can i get doxycycline – doxycycline hyclate

  7. Apostas bem-sucedidas com a melhor casa de apostas 1win

  8. Recomendo uma casa de apostas exclusiva 1win

  9. Timsothyabela表示:

    Hi everyone, it’s my first visit at this web page, and piece of writing is actually fruitful in support of me, keep up posting these content.

    https://gofilm.cc/

  10. Billyved表示:

    http://doxycyclinea.online/# doxycycline generic

  11. DavidHeism表示:

    Качественное написание курсовой работы https://courseworkmsk.ru/ на заказ. Низкие цены и антиплагиат от 70%. Точно в срок. Гарантия высокой оценки, бесплатные доработки.

  12. MarvinRoave表示:

    neurontin prescription coupon 2000 mg neurontin neurontin medication

  13. Henryfet表示:

    amoxicillin buy canada: amoxicillin generic – where to buy amoxicillin 500mg

  14. Henryfet表示:

    amoxicillin 1000 mg capsule: amoxicillin without a prescription – amoxicillin buy no prescription

  15. Charleselila表示:

    doxycycline 50mg: buy doxycycline – buy cheap doxycycline online

  16. A melhor casa de apostas para apostar 1win

  17. MarvinRoave表示:

    prednisone buy without prescription generic prednisone cost prednisone 10mg price in india

  18. Mvxrgk表示:

    brand cialis now – tadora grippe penisole price

  19. Henryfet表示:

    neurontin 204: neurontin 150mg – neurontin 330 mg

  20. A melhor opcao para apostas esportivas 1win

  21. MarvinRoave表示:

    buy neurontin online neurontin 4 mg buy cheap neurontin

  22. Williamgaish表示:

    Курсовые и дипломные работы https://newflatekb.ru/ на заказ. Выполняем любые типы работ онлайн в короткие сроки по выгодным ценам для студентов.

  23. Recomendo uma excelente casa de apostas 1win

  24. Casa de apostas confiavel, recomendada 1win

  25. Billyved表示:

    http://amoxila.pro/# can you purchase amoxicillin online

  26. Billyved表示:

    https://zithromaxa.store/# zithromax price canada

  27. Shaneevige表示:

    В современном мире, где диплом является началом успешной карьеры в любой сфере, многие стараются найти максимально простой путь получения качественного образования. Наличие официального документа об образовании переоценить невозможно. Ведь диплом открывает дверь перед каждым человеком, который хочет вступить в сообщество профессионалов или учиться в университете.
    Мы предлагаем оперативно получить любой необходимый документ. Вы можете купить диплом старого или нового образца, что становится удачным решением для человека, который не смог завершить образование, потерял документ или желает исправить плохие оценки. диплом изготавливается с особой тщательностью, вниманием к мельчайшим элементам, чтобы в итоге получился полностью оригинальный документ.
    Преимущество этого решения состоит не только в том, что можно оперативно получить диплом. Процесс организован удобно, с нашей поддержкой. От выбора нужного образца до точного заполнения личной информации и доставки по стране — все будет находиться под абсолютным контролем опытных специалистов.
    В результате, для тех, кто хочет найти максимально быстрый способ получения требуемого документа, наша компания предлагает отличное решение. Приобрести диплом – это значит избежать долгого обучения и не теряя времени перейти к важным целям, будь то поступление в университет или старт карьеры.
    http://www.diplomany.ru

  28. Lewisslund表示:

    В нашем мире, где диплом становится началом успешной карьеры в любой отрасли, многие ищут максимально простой путь получения качественного образования. Наличие документа об образовании переоценить невозможно. Ведь именно диплом открывает двери перед всеми, кто желает начать трудовую деятельность или продолжить обучение в любом институте.
    Предлагаем быстро получить этот важный документ. Вы имеете возможность приобрести диплом старого или нового образца, и это становится отличным решением для всех, кто не смог завершить обучение, утратил документ или хочет исправить плохие оценки. дипломы производятся аккуратно, с максимальным вниманием ко всем деталям, чтобы в итоге получился 100% оригинальный документ.
    Преимущества этого решения заключаются не только в том, что можно оперативно получить диплом. Весь процесс организовывается комфортно, с профессиональной поддержкой. Начав от выбора нужного образца документа до точного заполнения личной информации и доставки в любой регион страны — все находится под абсолютным контролем наших мастеров.
    Для тех, кто пытается найти максимально быстрый способ получить требуемый документ, наша компания готова предложить отличное решение. Заказать диплом – это значит избежать долгого обучения и не теряя времени перейти к достижению личных целей, будь то поступление в университет или старт удачной карьеры.
    vuzdiploma

  29. Billyved表示:

    https://doxycyclinea.online/# doxycycline 100mg dogs

  30. Richardorele表示:

    prednisone 2.5 mg: how much is prednisone 10 mg – 5 mg prednisone tablets

發佈留言

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