예전부터 자바를 이용해 엑셀을 조작하는 방법을 공부하고 싶었는데 오늘은 할 일이 없어서 그냥 조금 배워서 정리했습니다. Java를 사용하여 Excel을 작동하려면 http://sourceforge.net/projects/jexcelapi/files/에서 다운로드할 수 있는 jxl.jar라는 오픈 소스 도구가 있습니다.
1. 엑셀 파일 내용 읽기
다음과 같이 코드 코드를 복사합니다 .
/** *//**Excel 파일의 내용을 읽습니다.
* @param file 읽어올 파일
* @반품
*/
공개 정적 문자열 readExcel(파일 파일)...{
StringBuffer sb = new StringBuffer();
통합 문서 wb = null;
노력하다...{
//통합 문서 개체 생성
wb=Workbook.getWorkbook(파일);
} catch (BiffException e) ...{
e.printStackTrace();
} 잡기(IOException e) ...{
e.printStackTrace();
}
if(wb==널)
null을 반환;
//Workbook 개체를 얻은 후 이를 통해 Sheet(워크시트) 개체를 가져올 수 있습니다.
시트[] 시트 = wb.getSheets();
if(sheet!=null&&sheet.length>0)...{
//각 워크시트를 반복합니다.
for(int i=0;i<sheet.length;i++)...{
//현재 워크시트의 행 수를 가져옵니다.
int rowNum = sheet[i].getRows();
for(int j=0;j<rowNum;j++)...{
//현재 행의 모든 셀을 가져옵니다.
Cell[] 셀 = sheet[i].getRow(j);
if(cells!=null&&cells.length>0)...{
//각 셀을 반복합니다.
for(int k=0;k<cells.length;k++)...{
//현재 셀의 값을 읽습니다.
String cellValue = 세포[k].getContents();
sb.append(cellValue+" ");
}
}
sb.append(" ");
}
sb.append(" ");
}
}
//마지막으로 리소스를 닫고 메모리를 해제합니다.
wb.close();
sb.toString()을 반환합니다.
}
2. 엑셀 파일에 쓰기
여기에는 텍스트 내용을 굵게 표시하거나 특정 색상을 추가하는 등 다양한 형식이 있습니다. jxl의 API를 참조할 수 있습니다.
다음과 같이 코드 코드를 복사합니다 .
/**엑셀 파일 생성
* @param fileName 생성할 엑셀 파일 이름
*/
공개 정적 무효 writeExcel(문자열 파일 이름)...{
WritableWorkbook wwb = null;
노력하다...{
//먼저 Workbook 클래스의 팩토리 메소드를 사용하여 쓰기 가능한 통합 문서(Workbook) 개체를 생성합니다.
wwb = Workbook.createWorkbook(새 파일(파일 이름));
} 잡기(IOException e) ...{
e.printStackTrace();
}
if(wwb!=null)...{
//쓰기 가능한 워크시트 생성
//Workbook의 createSheet 메소드에는 두 개의 매개변수가 있습니다. 첫 번째는 워크시트의 이름이고, 두 번째는 워크북 내 워크시트의 위치입니다.
WritableSheet ws = wwb.createSheet("sheet1", 0);
//아래에 셀 추가 시작
for(int i=0;i<10;i++)...{
for(int j=0;j<5;j++)...{
//여기서 주목해야 할 점은 Excel에서는 첫 번째 매개변수가 열을 나타내고 두 번째 매개변수가 행을 나타낸다는 점입니다.
Label labelC = new Label(j, i, "이것은 "+(i+1)+" 행, "+(j+1)+" 열입니다.");
노력하다...{
//생성된 셀을 워크시트에 추가합니다.
ws.addCell(labelC);
} catch (RowsExceededException e) ...{
e.printStackTrace();
} catch (WriteException e) ...{
e.printStackTrace();
}
}
}
노력하다...{
//메모리에서 파일로 쓰기
wwb.write();
//리소스를 닫고 메모리를 해제합니다.
wwb.close();
} 잡기(IOException e) ...{
e.printStackTrace();
} catch (WriteException e) ...{
e.printStackTrace();
}
}
}
참고: 기존 Excel에 내용을 쓰려면 다음과 같이 진행해야 합니다.
다음과 같이 코드 코드를 복사합니다 .
WritableWorkbook 책 = null;
노력하다...{
// 엑셀이 파일을 가져옵니다.
통합 문서 wb = Workbook.getWorkbook(new File("D:/test.xls"));
// 파일의 복사본을 열고 지정된 데이터를 원본 파일에 다시 씁니다.
book = Workbook.createWorkbook(new File("D:/test.xls"), wb);
//워크시트 추가
WritableSheet 시트 = book.getSheet("sheet1");
sheet.addCell(new Label(8,3, "행 3, 열 8에 항목이 추가되었습니다."));
//TODO 다음 부분은 생략
}catch(예외 e)...{
e.printStackTrace();
}
3. Excel 파일에 특정 키워드가 포함되어 있는지 확인
다음과 같이 코드 코드를 복사합니다 .
/** 특정 파일에 특정 키워드가 포함되어 있는지 검색
* @param 파일 검색할 파일
* @param keyWord 검색할 키워드
* @반품
*/
공개 정적 부울 searchKeyWord(파일 파일, 문자열 keyWord)...{
부울 res = false;
통합 문서 wb = null;
노력하다...{
//통합 문서 개체 생성
wb=Workbook.getWorkbook(파일);
} catch (BiffException e) ...{
해상도를 반환;
} 잡기(IOException e) ...{
해상도를 반환;
}
if(wb==널)
해상도를 반환;
//Workbook 개체를 얻은 후 이를 통해 Sheet(워크시트) 개체를 가져올 수 있습니다.
시트[] 시트 = wb.getSheets();
부울 breakSheet = false;
if(sheet!=null&&sheet.length>0)...{
//각 워크시트를 반복합니다.
for(int i=0;i<sheet.length;i++)...{
if(breakSheet)
부서지다;
//현재 워크시트의 행 수를 가져옵니다.
int rowNum = sheet[i].getRows();
부울 breakRow = false;
for(int j=0;j<rowNum;j++)...{
if(breakRow)
부서지다;
//현재 행의 모든 셀을 가져옵니다.
Cell[] 셀 = sheet[i].getRow(j);
if(cells!=null&&cells.length>0)...{
부울 breakCell = false;
//각 셀을 반복합니다.
for(int k=0;k<cells.length;k++)...{
if(breakCell)
부서지다;
//현재 셀의 값을 읽습니다.
String cellValue = 세포[k].getContents();
if(셀값==널)
계속하다;
if(cellValue.contains(keyWord))...{
입술 = 사실;
breakCell = 사실;
breakRow = 사실;
breakSheet = 사실;
}
}
}
}
}
}
//마지막으로 리소스를 닫고 메모리를 해제합니다.
wb.close();
해상도를 반환;
}
4. 엑셀에 그림 아이콘 삽입
그림을 삽입하는 것은 쉽습니다. 다음 코드를 참조하세요.
다음과 같이 코드 코드를 복사합니다 .
/** *//**엑셀에 그림 삽입
* @param dataSheet 삽입할 워크시트
* @param col 이미지는 이 열에서 시작됩니다.
* @param row 그림은 이 행부터 시작됩니다.
* @param width 이미지가 차지하는 열 수
* @param height 이미지가 차지하는 행 수
* @param imgFile 삽입할 이미지 파일
*/
공개 정적 무효 insertImg(WritableSheet dataSheet, int col, int row, int 너비,
int 높이, 파일 imgFile)...{
WritableImage img = new WritableImage(col, row, width, height, imgFile);
dataSheet.addImage(img);
}
위 코드의 주석은 이미 매우 명확하므로 더 이상 설명할 필요가 없을 것입니다. 다음 프로그램을 사용하여 이를 확인할 수 있습니다.
다음과 같이 코드 코드를 복사합니다 .
노력하다...{
//워크북 생성
WritableWorkbook 통합 문서 = Workbook.createWorkbook(new File("D:/test1.xls"));
//삽입할 워크시트
WritableSheet imgSheet = workbook.createSheet("Images",0);
//삽입할 이미지 파일
File imgFile = new File("D:/1.png");
//그림은 두 번째 행의 첫 번째 셀에 삽입되며, 길이와 너비가 각각 6개의 셀을 차지합니다.
insertImg(imgSheet,0,1,6,6,imgFile);
통합 문서.write();
통합 문서.close();
} 잡기(IOException e) ...{
e.printStackTrace();
} catch (WriteException e) ...{
e.printStackTrace();
}
하지만 jxl은 png 형식의 사진만 지원하며 jpg나 gif 형식은 모두 지원하지 않습니다.
5. 머리글과 바닥글 삽입
일반적으로 머리글과 바닥글은 왼쪽, 가운데, 오른쪽 세 부분으로 구분됩니다. 머리글과 바닥글을 삽입하려면 다음 코드를 사용하세요.
다음과 같이 코드 코드를 복사합니다 .
/** *//**Excel에 머리글과 바닥글 추가
* @param dataSheet 헤더에 추가할 워크시트
* @param 왼쪽
* @param 센터
* @param 오른쪽
*/
공개 정적 무효 setHeader(WritableSheet dataSheet, 문자열 왼쪽, 문자열 센터, 문자열 오른쪽)...{
HeaderFooter hf = new HeaderFooter();
hf.getLeft().append(왼쪽);
hf.getCentre().append(center);
hf.getRight().append(right);
//헤더 추가
dataSheet.getSettings().setHeader(hf);
//바닥글 추가
//dataSheet.getSettings().setFooter(hf);
}
다음 코드를 사용하여 이 메서드를 테스트할 수 있습니다.
다음과 같이 코드 코드를 복사합니다 .
노력하다...{
//워크북 생성
WritableWorkbook 통합 문서 = Workbook.createWorkbook(new File("D:/test1.xls"));
//삽입할 워크시트
WritableSheet dataSheet = workbook.createSheet("헤더 추가",0);
ExcelUtils.setHeader(dataSheet, "chb", "2007-03-06", "1/3페이지");
통합 문서.write();
통합 문서.close();
} 잡기(IOException e) ...{
e.printStackTrace();
} catch (WriteException e) ...{
e.printStackTrace();
}