Java 가져오기 및 내보내기 Excel 작업(jxl)
Java는 Excel 데이터를 해석합니다(jxl.jar 패키지 사용).
키워드: 자바 엑셀 jxl.jar
jxl.jar 패키지 다운로드 주소:
http://www.andykhan.com/jexcelapi/
실제 다운로드 주소:
http://www.andykhan.com/jexcelapi/download.html
그 특징은 웹사이트에 다음과 같이 설명되어 있습니다.
● Excel 95-2000의 모든 버전 지원 ● Excel 2000 표준 형식 생성 ● 글꼴, 숫자 및 날짜 작업 지원 ● 셀 속성 수정 가능 ● 이미지 및 차트 지원 위의 기능은 우리의 요구를 대략적으로 충족시킬 수 있다고 해야 합니다. 가장 중요한 것은 이 API가 순수 Java이고 Windows 시스템에 의존하지 않는다는 것입니다. Linux에서 실행되더라도 여전히 Excel 파일을 올바르게 처리할 수 있습니다. 또한 이 API 세트는 그래픽과 차트에 대한 지원이 매우 제한적이며 PNG 형식만 인식한다는 점에 유의해야 합니다.
환경을 구축하기 위해서는 다운로드한 파일을 풀어서 jxl.jar을 얻어서 클래스패스에 넣으면 설치가 완료됩니다.
기본 조작
1. 파일을 생성하여 "Test Data.xls"라는 Excel 파일을 생성합니다. 여기서 첫 번째 워크시트의 이름은 "First Page"입니다.
자바 코드
/*
* 2007년 12월 30일 작성
*
* 이 생성된 파일의 템플릿을 변경하려면 다음으로 이동하세요.
* 창>기본 설정>Java>코드 생성>코드 및 주석
*/
패키지 JExcelTest.standard;
import java.io.*;
jxl.* 가져오기;
import jxl.write.*;
/**
* @저자 켄
*
* 생성된 유형의 주석에 대한 템플릿을 변경하려면 다음으로 이동하세요.
* 창>기본 설정>Java>코드 생성>코드 및 주석
*/
공개 클래스 CreateXLS {
공개 정적 무효 메인(String[] args) {
노력하다 {
//파일을 엽니다.
WritableWorkbook book = Workbook.createWorkbook(new File("d:/Test.xls"));
//"Sheet_1"이라는 시트를 만듭니다. 0은 이것이 첫 번째 페이지임을 의미합니다.
WritableSheet 시트 = book.createSheet("Sheet_1", 0);
//Label Constructor에서 셀 열과 행을 정의하고 셀 내용에 "test"를 씁니다.
//셀은 첫 번째 열, 첫 번째 행입니다. 값은 "test"입니다.
라벨 라벨 = new Label(0, 0, "테스트");
//위에 정의된 셀을 시트 인스턴스에 추가합니다.
sheet.addCell(레이블);
//숫자 추가를 사용하여 셀을 생성합니다. 경고: 통합 패키지 경로를 사용해야 합니다. 그렇지 않으면 경로 오류가 발생합니다.
//셀은 2번째 열, 1번째 행 값은 789.123입니다.
jxl.write.Number 번호 = new jxl.write.Number(1, 0, 789.123);
//위에 정의된 셀을 시트 인스턴스에 추가합니다.
sheet.addCell(번호);
//위에 정의된 모든 셀을 케이스에 추가합니다.
책.쓰기();
//파일 케이스를 닫습니다.
책.닫기();
} 잡기(예외 e) {
e.printStackTrace();
}
}
}
Java가 컴파일되고 실행되면 현재 위치에 Excel 파일이 생성됩니다.
2. 파일을 읽습니다. 방금 만든 Excel 파일을 예로 들어 간단한 읽기 작업을 수행합니다.
자바 코드
/*
* 2007년 12월 30일 작성
*
* 이 생성된 파일의 템플릿을 변경하려면 다음으로 이동하세요.
* 창>기본 설정>Java>코드 생성>코드 및 주석
*/
패키지 JExcelTest.standard;
import java.io.*;
jxl.* 가져오기;
/**
* @저자 켄
*
* 생성된 유형의 주석에 대한 템플릿을 변경하려면 다음으로 이동하세요.
* 창>기본 설정>Java>코드 생성>코드 및 주석
*/
공개 클래스 ReadXLS {
공개 정적 무효 메인(String[] args) {
노력하다 {
통합 문서 책 = Workbook.getWorkbook(new File("d:/Test.xls"));
//시트 개체를 가져옵니다.
시트 시트 = book.getSheet(0);
//첫 번째 열, 첫 번째 행 콘텐츠를 가져옵니다.
셀 셀 = sheet.getCell(0, 0);
문자열 결과 = cell.getContents();
System.out.println(결과);
책.닫기();
} 잡기(예외 e) {
e.printStackTrace();
}
}
}
프로그램 실행 결과: 테스트
3. 파일 수정 jExcelAPI를 사용하여 기존 Excel 파일을 수정할 수 있습니다. Excel 파일을 수정할 때 파일을 여는 방법을 제외하고 다른 작업은 Excel을 만드는 것과 동일합니다. 다음 예에서는 생성한 Excel 파일에 워크시트를 추가합니다.
Excel 클래스 수정 및 워크시트 추가
자바 코드
/*
* 2007년 12월 30일 작성
*
* 이 생성된 파일의 템플릿을 변경하려면 다음으로 이동하세요.
* 창>기본 설정>Java>코드 생성>코드 및 주석
*/
패키지 JExcelTest.standard;
import java.io.*;
jxl.* 가져오기;
import jxl.write.*;
/**
* @저자 켄
*
* 생성된 유형의 주석에 대한 템플릿을 변경하려면 다음으로 이동하세요.
* 창>기본 설정>Java>코드 생성>코드 및 주석
*/
공개 클래스 UpdateXLS {
공개 정적 무효 메인(String[] args) {
노력하다 {
//파일을 얻습니다.
통합 문서 wb = Workbook.getWorkbook(new File("d:/Test.xls"));
//복사 파일(새 파일)을 연 후 Test.xls를 사용하여 동일한 내용으로 내용을 작성합니다.
WritableWorkbook 책 =
Workbook.createWorkbook(new File("d:/Test.xls"), wb);
//시트를 추가합니다.
WritableSheet 시트 = book.createSheet("Sheet_2", 1);
sheet.addCell(new Label(0, 0, "test2"));
책.쓰기();
책.닫기();
} 잡기(예외 e) {
e.printStackTrace();
}
}
}
고급 작업
1. Excel의 데이터 형식에는 복잡한 데이터 유형이 포함되지 않으며 문자열, 숫자 및 날짜를 비교적 잘 처리할 수 있으며 일반 응용 프로그램에 충분합니다.
문자열 형식화 문자열 형식화에는 글꼴, 두께, 글꼴 크기 등과 같은 요소가 포함됩니다. 이러한 함수는 주로 WritableFont 및 WritableCellFormat 클래스를 담당합니다. 설명의 편의를 위해 문자열이 포함된 셀을 생성할 때 다음 명령문을 사용한다고 가정합니다.
WritableFont 글꼴1= new WritableFont(WritableFont.TIMES,16,WritableFont.BOLD);
또는
//글꼴 형식을 Excel에서 지원하는 형식으로 설정합니다.
WritableFont 글꼴3=new WritableFont(WritableFont.createFont("楷体_GB2312"),12,WritableFont.NO_BOLD );
① WritableCellFormat format1=new WritableCellFormat(글꼴1);
② 라벨 label=new Label(0,0,”데이터 4 테스트”,format1)
③ 그중
I. 문자열 형식을 지정합니다. 글꼴은 TIMES, 글꼴 크기는 16, 굵게 표시됩니다. WritableFont에는 다양한 상황에서 사용할 수 있는 매우 풍부한 생성자 세트가 있습니다. 여기에는 나열되지 않은 jExcelAPI의 java-doc에 자세한 목록이 있습니다.
II. 위 코드는 WritableCellFormat 클래스를 사용하는데, 이 클래스를 통해 셀의 다양한 속성을 지정할 수 있습니다.
III. Label 클래스의 생성자는 문자열이 제공되는 형식을 지정하는 데 사용됩니다. WritableCellFormat 클래스에서 또 다른 매우 중요한 방법은 데이터 정렬을 지정하는 것입니다. 예를 들어 위의 예에서는 다음을 지정할 수 있습니다.
//가로 정렬을 중앙 정렬로 지정
format1.setAlignment(jxl.format.Alignment.CENTRE);
//세로 정렬을 가운데 정렬로 지정
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
//자동 줄 바꿈 설정
format1.setWrap(true);
2. 셀 운영
Excel에서 매우 중요한 부분은 행 높이, 열 너비, 셀 병합 등과 같은 셀 작업입니다. 다행히 jExcelAPI는 이러한 지원을 제공합니다. 이러한 작업은 비교적 간단하며 아래에서는 관련 API만 소개합니다.
1. 셀 병합
WritableSheet.mergeCells(int m,int n,int p,int q);
이 기능은 (m,n)에서 (p,q)까지 모든 셀을 병합하는 것입니다. 예를 들면 다음과 같습니다.
WritableSheet sheet=book.createSheet("첫 번째 페이지",0);
//첫 번째 열의 첫 번째 행부터 여섯 번째 열의 첫 번째 행까지 모든 셀을 병합합니다.
sheet.mergeCells(0,0,5,0);
합병은 수평적일 수도 있고 수직적일 수도 있습니다. 병합된 셀은 다시 병합할 수 없습니다. 그렇지 않으면 예외가 발생합니다.
2. 행 높이 및 열 너비
WritableSheet.setRowView(int i,int height);
이 기능은 i+1번째 행의 높이를 지정하는 것입니다. 예를 들면 다음과 같습니다.
//첫 번째 행의 높이를 200으로 설정
sheet.setRowView(0,200);
WritableSheet.setColumnView(int i,int width);
그 기능은 i+1 열의 너비를 지정하는 것입니다. 예를 들면 다음과 같습니다.
//첫 번째 열의 너비를 30으로 설정
sheet.setColumnView(0,30);
3. 작업 사진
자바 코드
public static void write()가 예외를 발생시킵니다{
WritableWorkbook wwb=Workbook.createWorkbook(new File("c:/1.xls"));
WritableSheet ws=wwb.createSheet("테스트 시트 1",0);
파일 파일=새 파일("C:\jbproject\PVS\WebRoot\weekhit\1109496996281.png");
WritableImage 이미지=새 WritableImage(1, 4, 6, 18,파일);
ws.addImage(이미지);
wwb.write();
wwb.close();
}
이는 매우 간단하고 셀을 삽입하는 방법과 동일하지만 더 많은 매개변수가 있습니다. WritableImage 클래스는 Draw를 상속합니다. 위의 내용은 말할 필요도 없이 마지막 매개변수가 double 유형입니다. x, y, 너비, 높이 여기서의 너비와 높이는 그림의 너비와 높이가 아니라 그림이 차지하는 단위 수이므로 Draw의 유형은 두 배가 되어야 합니다. 어떻게 구현되는지 자세히 살펴보지는 않았습니다 :) 바쁘기 때문에 먼저 기능을 완성하고 나머지는 나중에 공부하는 시간을 갖도록 하겠습니다. 앞으로도 계속해서 사용해본 경험을 적어보겠습니다.
읽다:
읽을 때 아이디어는 다음과 같습니다. 먼저 입력 스트림(InputStream)을 사용하여 Excel 파일을 가져온 다음 jxl의 Workbook을 사용하여 통합 문서를 가져오고 Sheet를 사용하여 통합 문서에서 워크시트를 가져온 다음 Cell을 사용하여 워크시트의 특정 지점.
InputStream->Workbook->Sheet->Cell, Excel 파일에 셀이 표시됩니다.
자바 코드
문자열 경로="c:\excel.xls";//엑셀 파일 URL
InputStream is = new FileInputStream(path);//FileInputStream에 쓰기
jxl.Workbook wb = Workbook.getWorkbook(is) //통합문서 가져오기;
jxl.Sheet st = wb.getSheet(0);//통합 문서의 첫 번째 워크시트 가져오기
Cell cell=st.getCell(0,0);//워크시트의 첫 번째 셀인 A1을 가져옵니다.
String content=cell.getContents();//getContents()는 Cell의 문자를 문자열로 변환합니다.
wb.close();//통합문서 닫기
is.close();//입력 스트림을 닫습니다.
문자열 경로="c:\excel.xls";//엑셀 파일 URL
InputStream is = new FileInputStream(path);//FileInputStream에 쓰기
jxl.Workbook wb = Workbook.getWorkbook(is) //통합문서 가져오기;
jxl.Sheet st = wb.getSheet(0);//통합 문서의 첫 번째 워크시트 가져오기
Cell cell=st.getCell(0,0);//워크시트의 첫 번째 셀인 A1을 가져옵니다.
String content=cell.getContents();//getContents()는 Cell의 문자를 문자열로 변환합니다.
wb.close();//통합문서 닫기
is.close();//입력 스트림을 닫습니다. Sheet의 getCell(x,y) 메서드를 통해 모든 셀을 가져올 수 있으며 x, y는 Excel의 좌표에 해당합니다.
예를 들어 A1은 (0,0)에 해당하고, A2는 (0,1)에 해당하고, D3은 (3,2)에 해당합니다. Excel의 좌표는 A,1에서 시작하지만 jxl에서는 모두 0에서 시작합니다.
또한 Sheet의 getRows() 및 getColumns() 메서드를 통해 행과 열 수를 가져오고 이를 루프 제어에 사용하여 시트의 모든 내용을 출력할 수도 있습니다.
쓰다:
Excel에 내용을 쓰려면 주로 jxl.write 패키지의 클래스를 사용합니다.
아이디어는 다음과 같습니다.
OutputStream<-WritableWorkbook<-WritableSheet<-Label
여기서 레이블은 시트에 기록된 셀의 위치와 내용을 나타냅니다.
자바 코드
OutputStream os=new FileOutputStream("c:\test.xls");//엑셀 파일 URL 출력
WritableWorkbook wwb = Workbook.createWorkbook(os);//쓰기 가능한 통합 문서 만들기
WritableSheet ws = wwb.createSheet("sheet1", 0);//쓰기 가능한 워크시트 만들기
Label labelCF=new Label(0, 0, "hello");//작성 위치 및 내용 생성
ws.addCell(labelCF);//시트에 레이블 쓰기
Label의 생성자 Label(int x, int y, String aString) xy는 읽을 때 xy를 의미하고 aString은 작성된 내용입니다.
WritableFont wf = new WritableFont(WritableFont.TIMES, 12, WritableFont.BOLD, false);//글꼴 글꼴 설정
WritableCellFormat wcfF = new WritableCellFormat(wf);//CellFormat 설정
Label labelCF=new Label(0, 0, "hello");//쓰기 위치, 내용 및 형식 생성
Label의 또 다른 생성자인 Label(int c, int r, String cont, CellFormat st)는 작성된 내용의 형식을 지정하고 글꼴 및 기타 속성을 설정할 수 있습니다.
이제 쓰시면 됩니다
wwb.write();
작성 후 닫기
wwb.close();
또한 출력 스트림을 닫습니다.
os.close;
좋습니다. 읽기와 쓰기를 결합하면 N Excel에서 데이터를 읽고 원하는 새 Excel 테이블에 쓸 수 있어 매우 편리합니다.
다음은 프로그램의 예입니다.
자바 코드
sql = "테이블 이름에서 * 선택";
rs = stmt.executeQuery(sql);
//새 엑셀 파일 생성
String filePath=request.getRealPath("aaa.xls");
파일 myFilePath=새 파일(filePath);
if(!myFilePath.exists())
myFilePath.createNewFile();
FileWriter resultFile=새 FileWriter(myFilePath);
PrintWriter myFile=new PrintWriter(resultFile);
결과파일.close();
//JXL을 사용하여 새로 생성된 파일에 콘텐츠를 추가합니다.
OutputStream outf = new FileOutputStream(filePath);
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(outf);
jxl.write.WritableSheet ws = wwb.createSheet("sheettest", 0);
int i=0;
정수 j=0;
for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) {
ws.addCell(new Label(k,0,rs.getMetaData().getColumnName(k+1)));
}
동안(rs.next()){
out.println(rs.getMetaData().getColumnCount());
for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) {
ws.addCell(new Label(k,j+i+1,rs.getString(k+1)));
}
나++;
}
wwb.write();
wwb.close();
}catch(예외 e){e.printStackTrace();}
마지막으로{
rs.close();
conn.close();
}
response.sendRedirect("aaa.xls");
이 기사는 CSDN 블로그에서 가져온 것입니다. 재인쇄할 때 출처를 표시하십시오: http://blog.csdn.net/yangf1984/archive/2009/12/28/5088933.aspx