jxl 상세 사용 안내

Java Excel API는 로컬 파일 시스템의 파일(.xls) 또는 입력 스트림에서 Excel 데이터 테이블을 읽을 수 있습니다.Excel 데이터 테이블을 읽는 첫 번째 단계는 워크북을 만드는 것입니다. 다음 코드 세션은 예를 들어 어떻게 조작해야 하는지를 설명합니다. (전체 코드는 ExcelReading.java 참조)
import java.io.*;
import jxl.*;
… … … …
try
{
// Workbook ,  Workbook 
 // Workbook
// Workbook
    InputStream is = new FileInputStream(sourcefile);
    jxl.Workbook rwb = Workbook.getWorkbook(is);
}
catch (Exception e)
{
 e.printStackTrace();
}

 
Workbook을 만들면 Excel Sheet에 액세스할 수 있습니다.다음 코드 세그먼트를 참조하십시오.
// Sheet 
Sheet rs = rwb.getSheet(0);
 

 
Sheet 이름에 액세스하여 물어볼 수도 있고 아래 첨자로 액세스할 수도 있습니다.아래 첨자를 통해 접근하면 주의해야 할 점은 아래 첨자가 0부터 시작하는 것이다. 마치 수조와 같다.
Sheet을 얻으면 Excel Cell에 액세스할 수 있습니다.다음 코드 세그먼트를 참조하십시오.
// , 
Cell c00 = rs.getCell(0, 0);
String strc00 = c00.getContents();
// , 
Cell c10 = rs.getCell(1, 0);
String strc10 = c10.getContents();
// , 
Cell c11 = rs.getCell(1, 1);
String strc11 = c11.getContents();
System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : " + c00.getType());
System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " + c10.getType());
System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " + c11.getType());

 
Cell 값만 가져오면 getContents () 방법으로 모든 종류의 Cell 값을 문자열로 되돌릴 수 있습니다.예시 코드에서 셀 (0, 0) 은 텍스트형이고 셀 (1, 0) 은 숫자형이며 셀 (1, 1) 은 날짜형이며 getContents () 를 통해 세 가지 종류의 되돌아오는 값은 문자형이다.
Cell 컨텐츠의 정확한 유형을 알아야 하는 경우 API는 다양한 방법을 제공합니다.다음 코드 세그먼트를 참조하십시오.
String strc00 = null;
double strc10 = 0.00;
Date strc11 = null;
Cell c00 = rs.getCell(0, 0);
Cell c10 = rs.getCell(1, 0);
Cell c11 = rs.getCell(1, 1);
if(c00.getType() == CellType.LABEL)
{
LabelCell labelc00 = (LabelCell)c00;
strc00 = labelc00.getString();
}
if(c10.getType() == CellType.NUMBER)
{
 NmberCell numc10 = (NumberCell)c10;
strc10 = numc10.getValue();
}
if(c11.getType() == CellType.DATE)
{
DateCell datec11 = (DateCell)c11;
strc11 = datec11.getDate();
}
System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : " + c00.getType());
System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " + c10.getType());
System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " + c11.getType());

 
Cell 대상을 얻은 후 getType () 방법을 통해 이 칸의 유형을 얻을 수 있으며, API가 제공하는 기본 형식과 일치하여 상응하는 유형으로 강제로 변환하고, 마지막으로 상응하는 수치 추출 방법인 getXX () 를 호출하면 유형의 값을 확정할 수 있습니다.API는 다음 그림과 같이 Excel의 데이터 형식에 해당하는 다음과 같은 기본 유형을 제공합니다.
각 유형의 특정 의미는 Java Excel API Document 을 참조하십시오.
Excel 스프레드시트 데이터 처리를 마친 후, 이전에 만든 대상을 닫아서 데이터 테이블을 읽는 과정에서 차지하는 메모리 공간을 방출하는 것이 대량의 데이터를 읽을 때 특히 중요하다.다음 코드 세그먼트를 참조하십시오.
// , , 
rwb.close();

 
Java Excel API는 Excel 데이터 테이블에 액세스하는 여러 가지 방법을 제공합니다. 여기서 자주 사용하는 몇 가지 방법만 간단명료하게 소개하고, 다른 방법은 부록에 있는 Java Excel API Document을 참조하십시오.
Workbook 클래스에서 제공하는 방법
1. int getNumberOfSheets()는 워크북(Workbook)의 워크시트(Sheet) 개수를 획득합니다. 예:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
int sheets = rwb.getNumberOfSheets();

 
2. Sheet[] getSheets()는 워크북(Workbook)의 워크시트(Sheet) 객체 배열을 반환합니다. 예:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
Sheet[] sheets = rwb.getSheets();

 
3. String getVersion () 은 사용 중인 API의 버전 번호를 되돌려줍니다. 큰 도움이 되지 않는 것 같습니다.
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
Sheet[] sheets = rwb.getSheets();

 
 
Sheet 인터페이스에서 제공하는 방법
1) String getName()이 Sheet의 이름을 가져옵니다. 예:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
String sheetName = rs.getName();

 
2) int getColumns()는 Sheet 테이블에 포함된 총 열 수를 가져옵니다. 예:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
int rsColumns = rs.getColumns();

 
3) Cell[] getColumn(int column)은 열의 모든 셀을 가져오고 셀 객체 배열을 반환합니다. 예:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
Cell[] cell = rs.getColumn(0);

 
4) int getRows()는 Sheet 테이블에 포함된 총 행 수를 가져옵니다. 예:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
int rsRows = rs.getRows();

 
5) Cell[] getRow(int row)는 한 줄의 모든 셀을 가져옵니다. 예를 들어 셀 객체 배열을 반환합니다.
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
Cell[] cell = rs.getRow(0);

 
6) Cell getcell (int column, int row) 은 지정한 칸의 대상 인용을 가져옵니다. 주의해야 할 것은 두 개의 인자입니다. 첫 번째는 열이고, 두 번째는 줄입니다. 이것은 일반적인 줄, 열의 조합과 약간 다르다.
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
Cell cell = rs.getCell(0, 0);

 
 
다음 코드는 간단한 Excel 작업표를 만드는 방법을 소개합니다. 여기서 칸의 내용은 아무런 수식(예를 들어 글꼴, 색 등)이 없고 모든 내용을 문자열로 씁니다.(전체 코드는 ExcelWriting.java 참조)
Excel 작업표를 읽는 것과 비슷하게 우선 워크북 클래스의 공장 방법으로 쓰기 가능한 워크북 (Workbook) 대상을 만들어야 한다. 여기서 주의해야 할 것은 API가 제공하는 공장 방법으로만 워크북을 만들 수 있고, Writable 워크북의 구조 함수를 사용할 수 없다는 것이다. 왜냐하면 클래스 Writable Workbook의 구조 함수는 보호된 유형이기 때문이다.예제 코드 세그먼트는 다음과 같습니다.
import java.io.*;
import jxl.*;
import jxl.write.*;
… … … …
try
{
// Workbook ,  Workbook 
//Method 1: Excel 
    jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile));
//Method 2: WritableWorkbook 
/*
    OutputStream os = new FileOutputStream(targetfile);
    jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(os);
*/
}
catch (Exception e)
{
 e.printStackTrace();
}

 
API는 쓰기 가능한 출력 흐름을 처리하는 두 가지 방법을 제공합니다. 하나는 로컬 파일을 직접 생성하는 것입니다. 파일 이름이 전체 경로를 가지지 않으면 기본 파일은 현재 디렉터리에 위치하고 파일 이름이 전체 경로를 가지면 생성된 Excel 파일은 해당하는 디렉터리에 위치합니다.다른 하나는 Excel 객체를 출력 흐름에 직접 쓰는 것입니다. 예를 들어 사용자는 브라우저를 통해 웹 서버에 접근하고 HTTP 헤더가 올바르게 설정되면 브라우저는 클라이언트의 Excel 프로그램을 자동으로 호출하여 동적 생성된 Excel 전자 표를 표시합니다.
다음은 워크시트를 만드는 것입니다. 워크시트를 만드는 방법은 워크시트를 만드는 방법과 거의 같습니다. 마찬가지로 공장 모드 방법을 통해 상응하는 대상을 얻을 수 있습니다. 이 방법은 두 개의 매개 변수가 필요합니다. 하나는 워크시트의 이름이고 다른 하나는 워크시트가 워크시트에 있는 위치입니다. 아래의 코드 세션을 참고하십시오.
// Excel 
jxl.write.WritableSheet ws = wwb.createSheet("Test Sheet 1", 0);

 
"이 냄비도 다 받쳤고 재료도 다 준비되었으니 냄비를 내리기 시작해도 돼요!"이제 API에서 제공하는 Excel 기본 데이터 유형을 인스턴스화하고 워크시트에 추가하면 됩니다. 다음 코드 세그먼트를 참조하십시오.
//1. Label 
jxl.write.Label labelC = new jxl.write.Label(0, 0, "This is a Label cell");
ws.addCell(labelC);
// Formatting 
jxl.write.WritableFont wf = new jxl.write.WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD, true);
jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf);
jxl.write.Label labelCF = new jxl.write.Label(1, 0, "This is a Label Cell", wcfF);
ws.addCell(labelCF);
// Formatting 
jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false,
UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.RED);
jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);
jxl.write.Label labelCFC = new jxl.write.Label(1, 0, "This is a Label Cell", wcfFC);
ws.addCell(labelCF);
//2. Number 
jxl.write.Number labelN = new jxl.write.Number(0, 1, 3.1415926);
ws.addCell(labelN);
// formatting Number 
jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf);
jxl.write.Number labelNF = new jxl.write.Number(1, 1, 3.1415926, wcfN);
ws.addCell(labelNF);
//3. Boolean 
jxl.write.Boolean labelB = new jxl.write.Boolean(0, 2, false);
ws.addCell(labelB);
//4. DateTime 
jxl.write.DateTime labelDT = new jxl.write.DateTime(0, 3, new java.util.Date());
ws.addCell(labelDT);
// formatting DateFormat 
jxl.write.DateFormat df = new jxl.write.DateFormat("dd MM yyyy hh:mm:ss");
jxl.write.WritableCellFormat wcfDF = new jxl.write.WritableCellFormat(df);
jxl.write.DateTime labelDTF = new jxl.write.DateTime(1, 3, new java.util.Date(), wcfDF);
ws.addCell(labelDTF);

 
여기에는 모두가 모두의 주의를 끌 두 가지가 있다.첫 번째, 단원격을 구성할 때 단원격의 작업표에서의 위치가 이미 확정되었다.일단 창설된 후, 단원격의 위치는 변경할 수 없습니다. 비록 단원격의 내용은 변경할 수 있지만.두 번째, 단원격의 포지셔닝은 다음과 같은 규칙(column,row)에 따라 하고 아래 표시는 모두 0에서 시작한다. 예를 들어 A1은 (0,0)에 저장되고 B1은 (1,0)에 저장된다.
마지막으로 사용 중인 메모리를 확보하려면 열려 있는 Excel 워크시트 객체를 닫는 것을 잊지 마십시오. 다음 코드 세그먼트를 참조하십시오.
// Exel 
wwb.write();
// Excel 
wwb.close();

 
이것은 Excel 파일을 읽는 동작과 다를 수 있습니다. Excel 대상을 닫기 전에 write () 방법을 사용해야 합니다. 이전의 동작은 모두 캐시에 저장되어 있기 때문에 이 방법을 통해 동작의 내용을 파일에 저장해야 합니다.만약 네가 먼저 Excel 대상을 닫았다면, 빈 작업장 한 장만 얻을 수 있을 것이다.
 
다음에 간단하게 존재하는 워크북을 업데이트하는 방법을 소개한다. 주로 다음 두 번째 작업이다. 첫 번째 단계는 읽기만 하는 Excel 워크북을 구성하는 것이다. 두 번째 단계는 이미 만든 Excel 워크북을 이용하여 새로운 쓰기 가능한 Excel 워크북을 만드는 것이다. 다음 코드 세션을 참조한다. (전체 코드는 Excel Modifying.java 참조)
// Excel 
jxl.Workbook rw = jxl.Workbook.getWorkbook(new File(sourcefile));
// Excel 
jxl.write.WritableWorkbook  wwb = Workbook.createWorkbook(new File(targetfile), rw);
            
// 
jxl.write.WritableSheet ws = wwb.getSheet(0);
// 
jxl.write.WritableCell wc = ws.getWritableCell(0, 0);
            
// ,  
if(wc.getType() == CellType.LABEL)
{
Label l = (Label)wc;
    l.setString("The value has been modified.");
}
// Excel 
wwb.write();
// Excel 
wwb.close();
// Excel 
rw.close();

 
이러한 방법으로 Excel 객체를 구성하는 이유는 위의 예가 API의 주요 응용 프로그램이기 때문입니다.성능을 향상시키기 위해 작업표를 읽을 때 데이터와 관련된 출력 정보, 모든 형식 정보, 예를 들어 글꼴, 색깔 등은 처리되지 않는다. 왜냐하면 우리의 목적은 줄 데이터의 값을 얻는 것이기 때문에 수식이 없을 뿐만 아니라 줄 데이터의 값에도 아무런 영향을 주지 않는다.유일한 불리한 점은 메모리에 같은 작업표 두 개를 동시에 저장하는 것이다. 이렇게 하면 작업표의 부피가 비교적 크면 상당히 큰 메모리를 차지하지만 지금은 메모리의 크기가 중요한 요소가 아닌 것 같다.
쓰기 가능한 워크시트 대상을 얻으면, 우리는 단원격 대상을 업데이트할 수 있습니다. 여기서 우리는 API가 제공하는dd () 방법을 호출할 필요가 없습니다. 단원격은 이미 워크시트에 있기 때문에 상응하는 setXX () 방법만 호출하면 업데이트 작업을 완성할 수 있습니다.
단원격의 원래 포맷된 수식은 제거할 수 없습니다. 우리는 단원격의 내용을 다른 형식으로 표현하기 위해 새로운 단원격의 수식을 추가할 수 있습니다.
새로 생성된 작업표의 대상은 쓰기 가능합니다. 우리는 원래의 칸을 업데이트하는 것 외에 새 칸을 작업표에 추가할 수 있습니다. 이것은 예시 2의 작업과 완전히 같습니다.
마지막으로, write () 방법을 사용해서 업데이트된 내용을 파일에 쓴 다음, 작업장 대상을 닫는 것을 잊지 마십시오. 여기에는 두 개의 작업장 대상이 닫혀 있습니다. 하나는 읽기만 하고, 다른 하나는 쓸 수 있습니다.

좋은 웹페이지 즐겨찾기