자바 프로그램으로 엑셀 파일을 읽어서 출력하는 프로그램을 구성해 본다.

엑셀 파일의 확장자가 .xls 인데, .xlsx로 변환하여 저장한 후 .xlsx 형식의 데이터 파일을 읽어서 필요한 정보를 출력하였다.

다음 사이트를 참조 하였다.

https://huskdoll.tistory.com/890

필요한 라이브러리는 poi-3.11.jar, poi-ooxml-3.11.jar, poi-ooxml-schemas-3.11.jar, xmlbeans-2.6.0.jar 이다. 이를 Java Build Path 설정에서 lib로 포함시켜 준다.

package excel;
 
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
public class ExcelRead {
    public static void main(String[] args) {
    	List<String[]> list = new ArrayList<String[]>();
        try (FileInputStream file = new FileInputStream("C:\\Users\\ksseo\\Downloads\\시험문제(2022-01-22).xlsx");
                XSSFWorkbook workbook = new XSSFWorkbook(file);){
            int rowindex=0;
            int columnindex=0;
            //시트 수 (첫번째에만 존재하므로 0을 준다)
            //만약 각 시트를 읽기위해서는 FOR문을 한번더 돌려준다
            XSSFSheet sheet=workbook.getSheetAt(0);
            //행의 수
            int rows=sheet.getPhysicalNumberOfRows();
            for(rowindex=0;rowindex<rows;rowindex++){
            	
                //행을읽는다
                XSSFRow row=sheet.getRow(rowindex);
                if(row !=null){
                    //셀의 수
                    int cells=row.getPhysicalNumberOfCells();
                    String[] data = new String[cells];
                    for(columnindex=0; columnindex<=cells; columnindex++){
                        //셀값을 읽는다
                        XSSFCell cell=row.getCell(columnindex);
                        String value="";
                        //셀이 빈값일경우를 위한 널체크
                        if(cell==null){
                            continue;
                        }else{
                            //타입별로 내용 읽기
                            switch (cell.getCellType()){
                            case XSSFCell.CELL_TYPE_FORMULA:
                                value=cell.getCellFormula();
                                break;
                            case XSSFCell.CELL_TYPE_NUMERIC:
                                value=cell.getNumericCellValue()+"";
                                break;
                            case XSSFCell.CELL_TYPE_STRING:
                                value=cell.getStringCellValue()+"";
                                break;
                            case XSSFCell.CELL_TYPE_BLANK:
                                value=cell.getBooleanCellValue()+"";
                                break;
                            case XSSFCell.CELL_TYPE_ERROR:
                                value=cell.getErrorCellValue()+"";
                                break;
                            }
                            data[columnindex] = value;
                        }
//                        System.out.println(rowindex+"번 행 : "+columnindex+"번 열 값은: "+value);
                    }
                    list.add(data);
                }
            }
 
        }catch(Exception e) {
            e.printStackTrace();
        }
        for(int i = 0; i < 20 ; i++) {	// 20문제
        	int offset = generateRandomNumber();
        	int base = i * 9 + 1 + offset;
        	String[] problem = list.get(base);
        	System.out.println("[문제 " + (i+1) + "] " + problem[3]);
        	System.out.println("1. " + problem[9]);
        	System.out.println("2. " + problem[10]);
        	System.out.println("3. " + problem[11]);
        	System.out.println("4. " + problem[12]);
        	System.out.println();
        }
    }

	private static int generateRandomNumber() {
		return (int)(Math.random() * 9);
	}
}
Posted by 세상을 살아가는 사람
,