스프레드시트 관리 작업
스프레드시트 관리 작업
이 가이드는 Aspose.Cells FOSS for Java를 사용하여 Excel 워크북을 생성, 로드, 수정 및 저장하는 방법을 보여줍니다. 엔드-투-엔드 스프레드시트 관리를 위해 Workbook, WorksheetCollection, Worksheet, Cells, Cell 클래스를 사용하는 방법을 배울 수 있습니다.
새 워크북 만들기
인수 없이 호출하는 생성자를 사용하여 빈 워크북을 생성합니다. Sheet1라는 이름의 단일 빈 워크시트가 자동으로 추가됩니다.
import com.aspose.cells.foss.Workbook;
import com.aspose.cells.foss.WorksheetCollection;
import com.aspose.cells.foss.Worksheet;
Workbook workbook = new Workbook();
WorksheetCollection sheets = workbook.getWorksheets();
Worksheet sheet = sheets.get(0);
System.out.println("Sheet name: " + sheet.getName()); // Sheet1파일에서 워크북 로드
Workbook(fileName) 생성자에 파일 경로를 전달하여 기존 .xlsx 또는 .ods 파일을 엽니다. 형식 감지나 비밀번호 처리를 제어해야 할 때는 Workbook(fileName, options)를 사용하여 LoadOptions를 제공합니다.
import com.aspose.cells.foss.Workbook;
import com.aspose.cells.foss.LoadOptions;
// Simple load
Workbook workbook = new Workbook("data/report.xlsx");
// Load with explicit options
LoadOptions opts = new LoadOptions();
Workbook workbookWithOpts = new Workbook("data/report.xlsx", opts);스트림에서 워크북 로드
Workbook(stream)와 Workbook(stream, options)은 모든 java.io.InputStream를 허용합니다. 이는 파일이 네트워크 리소스, 데이터베이스 BLOB 또는 메모리 내 바이트 배열에서 올 때 유용합니다.
import com.aspose.cells.foss.Workbook;
import java.io.FileInputStream;
import java.io.InputStream;
try (InputStream is = new FileInputStream("data/template.xlsx")) {
Workbook workbook = new Workbook(is);
System.out.println("Worksheets: " + workbook.getWorksheets().getCount());
}워크시트 접근 및 관리
Workbook.getWorksheets()은 WorksheetCollection을 반환합니다. 인덱스 또는 이름으로 시트를 가져오고, 모든 시트를 순회하며, 필요에 따라 시트를 추가하거나 제거합니다.
import com.aspose.cells.foss.Workbook;
import com.aspose.cells.foss.WorksheetCollection;
import com.aspose.cells.foss.Worksheet;
Workbook workbook = new Workbook();
WorksheetCollection sheets = workbook.getWorksheets();
// Access by index
Worksheet first = sheets.get(0);
System.out.println(first.getName()); // Sheet1
// Add a named sheet
int idx = sheets.add("Summary");
Worksheet summary = sheets.get(idx);
summary.setName("Summary");
// Iterate all sheets
for (Worksheet ws : sheets) {
System.out.println("Sheet: " + ws.getName());
}
// Remove a sheet by name
sheets.removeAt("Sheet1");
System.out.println("Remaining sheets: " + sheets.getCount());셀 값 읽기 및 쓰기
Worksheet.getCells()을 사용하여 셀로 이동하면 Cells 컬렉션이 반환됩니다. 이름(예: "A1")이나 0부터 시작하는 행/열 인덱스로 Cell를 가져옵니다. 기본값을 쓰려면 putValue()를 사용하고, 읽어오려면 getValue() / getStringValue()를 사용합니다.
import com.aspose.cells.foss.Workbook;
import com.aspose.cells.foss.Worksheet;
import com.aspose.cells.foss.Cells;
import com.aspose.cells.foss.Cell;
Workbook workbook = new Workbook();
WorksheetCollection sheets = workbook.getWorksheets();
Worksheet sheet = sheets.get(0);
Cells cells = sheet.getCells();
// Write values
cells.get("A1").putValue("Product");
cells.get("B1").putValue("Units Sold");
// Write by row/column index (0-based)
Cell a2 = cells.get(1, 0);
a2.putValue("Widget A");
Cell b2 = cells.get(1, 1);
b2.putValue(1200);
// Read back
System.out.println(a2.getStringValue()); // Widget A
System.out.println(b2.getValue()); // 1200셀 수식 설정
setFormula()을 통해 셀에 수식 문자열을 할당합니다. Aspose.Cells은 워크북이 저장될 때 또는 계산이 명시적으로 트리거될 때 수식을 평가합니다.
import com.aspose.cells.foss.Workbook;
import com.aspose.cells.foss.Cells;
import com.aspose.cells.foss.Cell;
Workbook workbook = new Workbook();
WorksheetCollection sheets = workbook.getWorksheets();
Cells cells = sheets.get(0).getCells();
cells.get("A1").putValue(100);
cells.get("A2").putValue(200);
Cell a3 = cells.get("A3");
a3.setFormula("=SUM(A1:A2)");
System.out.println("Formula: " + a3.getFormula()); // =SUM(A1:A2)워크북 저장
Workbook.save(fileName)을 사용하여 워크북을 디스크에 씁니다. 출력 형식은 파일 확장자에 따라 결정되며, Excel 워크북의 경우 .xlsx을 사용합니다.
import com.aspose.cells.foss.Workbook;
Workbook workbook = new Workbook();
workbook.getWorksheets().get(0).getCells().get("A1").putValue("Hello");
// Save to file -- format inferred from .xlsx extension
workbook.save("output/result.xlsx");리소스 해제
Workbook은 AutoCloseable을 구현합니다. try-with-resources 블록을 사용하여 워크북의 내부 리소스가 사용 후 즉시 해제되도록 합니다.
import com.aspose.cells.foss.Workbook;
try (Workbook workbook = new Workbook("data/large.xlsx")) {
workbook.save("output/large_modified.xlsx");
}
// workbook.close() called automatically팁 및 모범 사례
- 대용량 파일의 경우 파일 핸들을 열어 두는 것을 방지하기 위해 항상 try-with-resources (
try (Workbook wb = new Workbook(...)))를 사용하세요. - 핫 루프에서는
cells.get(row, column)을cells.get(cellName)보다 선호합니다; 정수 오버로드는 셀 이름 파싱을 반복하는 것을 방지합니다. - 시트에 인덱스로 접근하기 전에
workbook.getWorksheets().getCount()을 호출하여IndexOutOfBoundsException을 방지하세요. - 시트를
add()후에setName()으로 명시적으로 이름 지정하면, 하위 코드가 불안정한 인덱스가 아니라 이름으로 시트를 찾을 수 있습니다. setFormula()직후에 바로 수식 결과에 의존하지 마세요; 먼저 저장하거나 같은 세션에서 계산된 값이 필요하면 다시 로드하세요.
일반적인 문제
| 문제 | 원인 | 해결 방법 |
|---|---|---|
WorkbookLoadException new Workbook(fileName)에서 | 파일 경로가 올바르지 않거나 파일이 잠겨 있음 | 경로가 존재하고 읽을 수 있는지 확인하십시오; 파일을 보유하고 있는 다른 애플리케이션을 닫으십시오 |
get(index)가 IndexOutOfBoundsException를 발생시킴 | 시트 인덱스가 getCount() - 1를 초과함 | 액세스하기 전에 sheets.getCount()을 확인하고; 새 시트를 만들려면 add()을 사용하십시오 |
수식 셀이 빈 getValue()을 반환합니다 | 수식이 메모리 내에서 자동으로 계산되지 않습니다 | 워크북을 저장하고 다시 로드하여 수식 결과를 얻으십시오 |
save() 이후에 출력 파일이 손상되었습니다 | 잘못된 파일 확장자 | 파일 이름이 .xlsx으로 끝나는지 확인하십시오; 형식은 확장자에서 추론됩니다 |
FAQ
워크시트의 이름을 어떻게 바꾸나요?
인덱스로 WorksheetCollection에서 Worksheet 객체를 가져온 다음, 새 표시 이름을 사용하여 setName(name)를 호출합니다:
workbook.getWorksheets().get(0).setName("Sales Data");워크북에 시트가 몇 개 있는지 어떻게 확인하나요?
Workbook.getWorksheets()가 반환한 WorksheetCollection에 대해 getCount()를 호출하여 워크시트 총 수를 가져옵니다:
int count = workbook.getWorksheets().getCount();한 번의 호출로 여러 시트를 추가할 수 있나요?
번호. 시트당 worksheets.add(sheetName)를 한 번 호출합니다. 각 호출은 새로 생성된 시트의 인덱스를 반환합니다.
셀 값의 유형을 어떻게 확인합니까?
이름으로 Cell를 검색하고 getType()를 호출하십시오. 이 호출은 CellValueType 열거형 값을 반환합니다:
Cell cell = cells.get("A1");
System.out.println(cell.getType()); // CellValueType enum valueAPI Reference 요약
| 클래스 / 메서드 | 설명 |
|---|---|
Workbook() | 빈 워크북을 하나의 빈 시트와 함께 생성합니다 |
Workbook(fileName) | 파일 경로에서 워크북을 로드합니다 |
Workbook(stream) | InputStream에서 워크북을 로드합니다 |
Workbook(fileName, options) | LoadOptions와 함께 워크북을 로드합니다 |
Workbook.getWorksheets() | 반환합니다 WorksheetCollection |
Workbook.save(fileName) | 파일에 저장합니다 (확장자에서 형식을 추론) |
Workbook.save(stream, format) | 명시적인 SaveFormat와 함께 스트림에 저장합니다 |
WorksheetCollection.get(index) | 0 기반 인덱스로 시트를 반환합니다 |
WorksheetCollection.get(name) | 이름으로 시트 반환 |
WorksheetCollection.add(sheetName) | 이름이 지정된 시트를 추가하고 인덱스를 반환 |
WorksheetCollection.getCount() | 워크북의 시트 수 |
WorksheetCollection.removeAt(sheetName) | 이름으로 시트 제거 |
Worksheet.getCells() | 이 시트에 대한 Cells 컬렉션을 반환합니다 |
Worksheet.getName() / setName() | 시트 탭 이름을 가져오거나 설정합니다 |
Cells.get(cellName) | 이름으로 Cell를 반환합니다 (예: “A1”) |
Cells.get(row, column) | 0 기반 행/열로 Cell를 반환합니다 |
Cell.putValue(value) | 셀에 값을 씁니다 |
Cell.getValue() | 셀 값을 Object 로 읽습니다 |
Cell.getStringValue() | 셀 값을 하나의 String 로 읽습니다 |
Cell.setFormula(formula) | 수식 문자열을 설정합니다 (예: “=SUM(A1:A2)”) |
LoadOptions | 워크북 로딩 구성 |
SaveFormat | 형식 상수의 열거형 (형식은 파일 확장자를 통해 추론되며; save()에 전달되지 않음) |