티스토리 뷰
엑셀파일내용을 분석해야할일이 생겼다.
노가다를 하기에는 도무지엄두가 안나서 프로그램을 짜서 해결하기로 결정.
엑셀파일을 읽을수 있게 지원해주는 라이브러리가 뭐가 있나 구글링을 해봤다.
발견된 녀석은 바로 이녀석 poi
홈페이지는 여기다. http://poi.apache.org/
라이브러리 셋팅은 따로 설명하지 않겠다. ^^;
다음 코드는 엑셀파일을 읽어서 HashMap<Integer, HashMap<Integer,String>> 으로 값을 반환해주는 녀석이다.
겉에 HashMap의 첫번째 값은 Row이고 속에 HashMap은<Column,Value> 이다.
설명은 여기까지 다음은 코드이다.
POIExcelManager.java
import java.util.HashMap;
public interface POIExcelManager {
public HashMap<Integer, HashMap<Integer,String>> GetRowHashMap(String aFileName,int aSheetNumber);
public boolean WriteExcelFile(String aXLSXExcelFilePath, String aSheetName, HashMap<Integer, HashMap<Integer,String>> aHashMap);
}
POIExcelManagerImpl.java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class POIExcelManagerImpl implements POIExcelManager{
protected XSSFWorkbook GetXSSFWorkbook(String aFileName){
XSSFWorkbook workbook = null;
try {
FileInputStream file = new FileInputStream(new File(aFileName));
workbook = new XSSFWorkbook(file);
file.close();
} catch (Exception e) {
return null;
}
return workbook;
}
protected XSSFSheet GetXSSFSheet(String aFileName, int aSheetNumber){
XSSFWorkbook workbook = this.GetXSSFWorkbook(aFileName);
XSSFSheet sheet = null;
if (workbook == null) {
return null;
}
try{
sheet = workbook.getSheetAt(aSheetNumber);
}catch(Exception e){
return null;
}
return sheet;
}
public HashMap<Integer, HashMap<Integer,String>> GetRowHashMap(String aFileName,int aSheetNumber){
Iterator<Row> rowIterator = null;
XSSFSheet sheet = this.GetXSSFSheet(aFileName, aSheetNumber);
if(sheet == null){
return null;
}
HashMap<Integer, HashMap<Integer,String>> excelHashMap = new HashMap<>();
HashMap<Integer, String> cellHashMap = new HashMap<>();
rowIterator = sheet.iterator();
while(rowIterator.hasNext()){
Row row = rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
while(cellIterator.hasNext()){
Cell cell = cellIterator.next();
int columnIndex = cell.getColumnIndex();
String strCellValue = "";
switch(cell.getCellType())
{
case Cell.CELL_TYPE_NUMERIC:
strCellValue = String.valueOf(cell.getNumericCellValue());
break;
case Cell.CELL_TYPE_STRING:
strCellValue = cell.getStringCellValue();
break;
case Cell.CELL_TYPE_BLANK:
strCellValue = "";
break;
case Cell.CELL_TYPE_BOOLEAN:
strCellValue = String.valueOf( cell.getBooleanCellValue() );
break;
default:
strCellValue = "";
break;
}
cellHashMap.put(columnIndex, strCellValue);
}
excelHashMap.put(excelHashMap.size(), cellHashMap);
cellHashMap = new HashMap<>();
}
if(excelHashMap.size()==0){
return null;
}
return excelHashMap;
}
@Override
public boolean WriteExcelFile(String aXLSXExcelFilePath, String aSheetName, HashMap<Integer, HashMap<Integer,String>> aHashMap) {
if(aHashMap == null || aHashMap.size()==0){
return false;
}
if(aSheetName==null || aSheetName.length()==0){
return false;
}
int dataFormatToken = aXLSXExcelFilePath.indexOf(".");
String strDataFormat = aXLSXExcelFilePath.substring(dataFormatToken + 1, aXLSXExcelFilePath.length());
if(!strDataFormat.equals("xlsx")){
return false;
}
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet(aSheetName);
for(int rowIdx=0; rowIdx<aHashMap.size(); rowIdx++){
Row row = sheet.createRow(rowIdx);
HashMap<Integer,String> cellHashMap = aHashMap.get(rowIdx);
Set<Integer> keySet = cellHashMap.keySet();
Iterator<Integer> keyIterator = keySet.iterator();
while(keyIterator.hasNext()){
Integer key = keyIterator.next();
Cell cell = row.createCell(key);
String strCellValue = cellHashMap.get(key);
cell.setCellValue(strCellValue);
}
}
try
{
FileOutputStream out = new FileOutputStream(new File(aXLSXExcelFilePath));
workbook.write(out);
out.close();
System.out.print("Success\n");
}
catch (Exception e)
{
System.out.print("Fail \n");
e.printStackTrace();
return false;
}
return true;
}
}
호출 코드이다.
HashMap<Integer, HashMap<Integer,String>> multilingualDatasheetHashMap = mPoiExcelFileManager.GetRowHashMap(mExcelFilePath /* Excel File Path */,
0 /* Sheet Number */ );
결과화면이다.
결과화면을 보면1798 Row를 다 읽은것을 볼수있다.
poi라이브러리는 xls 와 xlsx 둘다 지원하지만 나는 xlsx만 필요해서 xlsx만 읽게 제작하였다.
만약 xls가 필요하신분이라면 내용을 수정해서 사용하시면 되겠다.
이 코드는 내 입맛대로 만든것이기 때문에 참고용코드이다.
만약 수정이 필요하다면 본인의 입맛대로 바꿔서 수정하시면 되겠다.
누군가에게는 작은도움이 되었기를 바라면서 오늘의 포스팅 끝~
'Java & Spring' 카테고리의 다른 글
[Java] Thread 동기화하기 (0) | 2016.02.01 |
---|---|
[Java] 데몬 스레드(Daemon Thread) 설정하기 (0) | 2016.02.01 |
[Java] ShutDownHook을 이용한 Thread비정상 종료에 대응하기 (0) | 2016.02.01 |
[Java] String과 StringBuffer의 차이 (0) | 2016.02.01 |
[Java] JVM(Java Virtual Machine), JDK(Java Development Kit), JRE(Java Runtime Environment) 에 대해서 알고가기 (0) | 2016.02.01 |
- Total
- Today
- Yesterday
- 인덱스
- 루비 메타프로그래밍
- Elasticsearch Cluster
- 루비
- Autoloading
- Pair-programming
- InnoDB
- metaprogramming
- MySQL
- MySQL 인덱스
- 트랜잭션
- ruby meta programming
- dead lock
- ruby
- 넥스트 키 락
- db
- gap lock
- mysql lock
- 되추적
- 엘라스틱서치 기초
- autoload_paths
- 루비 상수
- next key lock
- 갭 락
- lock
- 페어 프로그래밍
- 메타프로그래밍
- MySQL 족보
- innoDB lock
- 페어프로그래밍
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |