Praca z zarządzaniem arkuszami
Praca z zarządzaniem arkuszami kalkulacyjnymi
Ten przewodnik pokazuje, jak tworzyć, wczytywać, modyfikować i zapisywać skoroszyty Excel przy użyciu Aspose.Cells FOSS dla Java. Nauczysz się pracować z klasami Workbook, WorksheetCollection, Worksheet, Cells i Cell w celu kompleksowego zarządzania arkuszami kalkulacyjnymi.
Tworzenie nowego skoroszytu
Użyj konstruktora bez argumentów, aby utworzyć pusty skoroszyt. Jeden pusty arkusz o nazwie Sheet1 zostaje dodany automatycznie.
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()); // Sheet1Wczytywanie skoroszytu z pliku
Przekaż ścieżkę do pliku do konstruktora Workbook(fileName), aby otworzyć istniejący plik .xlsx lub .ods. Użyj Workbook(fileName, options), aby podać LoadOptions, gdy potrzebujesz kontrolować wykrywanie formatu lub obsługę hasła.
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);Wczytywanie skoroszytu ze strumienia
Workbook(stream) i Workbook(stream, options) akceptują dowolny java.io.InputStream. Jest to przydatne, gdy plik pochodzi z zasobu sieciowego, BLOB-a w bazie danych lub z tablicy bajtów w pamięci.
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());
}Dostęp i zarządzanie arkuszami
Workbook.getWorksheets() zwraca WorksheetCollection. Pobieraj arkusze według indeksu lub nazwy, iteruj po wszystkich arkuszach oraz dodawaj lub usuwaj arkusze w razie potrzeby.
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());Odczyt i zapis wartości komórek
Nawiguj do komórki przy użyciu Worksheet.getCells(), które zwraca kolekcję Cells. Pobierz Cell po nazwie (np. "A1") lub po indeksie wiersza/kolumny zaczynając od zera. Użyj putValue() do zapisu wartości prymitywnych oraz getValue() / getStringValue() do ich odczytu.
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()); // 1200Ustawianie formuł w komórkach
Przypisz ciąg formuły do komórki przy użyciu setFormula(). Aspose.Cells ocenia formuły podczas zapisywania skoroszytu lub gdy obliczenia są wywoływane jawnie.
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)Zapisywanie skoroszytu
Użyj Workbook.save(fileName), aby zapisać skoroszyt na dysku. Format wyjściowy jest określany na podstawie rozszerzenia pliku; użyj .xlsx dla skoroszytów Excel.
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");Zwalnianie zasobów
Workbook implementuje AutoCloseable. Użyj bloku try-with-resources, aby zapewnić, że wewnętrzne zasoby skoroszytu są zwalniane niezwłocznie po użyciu.
import com.aspose.cells.foss.Workbook;
try (Workbook workbook = new Workbook("data/large.xlsx")) {
workbook.save("output/large_modified.xlsx");
}
// workbook.close() called automaticallyWskazówki i najlepsze praktyki
- Zawsze używaj try-with-resources (
try (Workbook wb = new Workbook(...))) dla dużych plików, aby uniknąć pozostawiania otwartych uchwytów plików. - Preferuj
cells.get(row, column)zamiastcells.get(cellName)w pętli o dużej intensywności; przeciążenie przyjmujące liczbę całkowitą eliminuje powtarzające się parsowanie nazw komórek. - Wywołaj
workbook.getWorksheets().getCount()przed dostępem do arkuszy według indeksu, aby uniknąćIndexOutOfBoundsException. - Nazwij swoje arkusze explicite przy użyciu
setName()poadd(), aby kod downstream mógł je wyszukiwać po nazwie, a nie po kruchym indeksie. - Nie polegaj od razu na wynikach formuły po
setFormula(); najpierw zapisz lub odśwież, jeśli potrzebujesz obliczonych wartości w tej samej sesji.
Typowe problemy
| Problem | Przyczyna | Naprawa |
|---|---|---|
WorkbookLoadException na new Workbook(fileName) | Ścieżka do pliku niepoprawna lub plik zablokowany | Sprawdź, czy ścieżka istnieje i jest czytelna; zamknij inne aplikacje trzymające plik |
get(index) rzuca IndexOutOfBoundsException | Indeks arkusza przekracza getCount() - 1 | Sprawdź sheets.getCount() przed dostępem; użyj add(), aby utworzyć nowy arkusz |
Komórka formuły zwraca pusty getValue() | Formuły nie są automatycznie obliczane w pamięci | Zapisz skoroszyt i ponownie go wczytaj, aby uzyskać wyniki formuł |
Plik wyjściowy jest uszkodzony po save() | Nieprawidłowe rozszerzenie pliku | Upewnij się, że nazwa pliku kończy się na .xlsx; format jest wyprowadzany z rozszerzenia |
FAQ
Jak zmienić nazwę arkusza?
Pobierz obiekt Worksheet według indeksu z WorksheetCollection i wywołaj setName(name) z nową nazwą wyświetlaną:
workbook.getWorksheets().get(0).setName("Sales Data");Jak sprawdzić, ile arkuszy ma skoroszyt?
Wywołaj getCount() na WorksheetCollection zwróconym przez Workbook.getWorksheets(), aby uzyskać łączną liczbę arkuszy:
int count = workbook.getWorksheets().getCount();Czy mogę dodać wiele arkuszy w jednym wywołaniu?
No. Wywołaj worksheets.add(sheetName) raz na arkusz. Każde wywołanie zwraca indeks nowo utworzonego arkusza.
Jak sprawdzić typ wartości komórki?
Pobierz Cell po nazwie i wywołaj getType(), które zwraca wartość wyliczeniową CellValueType:
Cell cell = cells.get("A1");
System.out.println(cell.getType()); // CellValueType enum valueAPI Reference Podsumowanie
| Klasa / Metoda | Opis |
|---|---|
Workbook() | Tworzy pusty skoroszyt z jednym pustym arkuszem |
Workbook(fileName) | Wczytuje skoroszyt z ścieżki pliku |
Workbook(stream) | Wczytuje skoroszyt z InputStream |
Workbook(fileName, options) | Wczytuje skoroszyt przy użyciu LoadOptions |
Workbook.getWorksheets() | Zwraca WorksheetCollection |
Workbook.save(fileName) | Zapisuje do pliku (format wywnioskowany z rozszerzenia) |
Workbook.save(stream, format) | Zapisuje do strumienia z wyraźnym SaveFormat |
WorksheetCollection.get(index) | Zwraca arkusz według indeksu zerowego |
WorksheetCollection.get(name) | Zwraca arkusz po nazwie |
WorksheetCollection.add(sheetName) | Dodaje nazwany arkusz; zwraca jego indeks |
WorksheetCollection.getCount() | Liczba arkuszy w skoroszycie |
WorksheetCollection.removeAt(sheetName) | Usuwa arkusz po nazwie |
Worksheet.getCells() | Zwraca kolekcję Cells dla tego arkusza |
Worksheet.getName() / setName() | Pobiera lub ustawia nazwę zakładki arkusza |
Cells.get(cellName) | Zwraca Cell po nazwie (np. “A1”) |
Cells.get(row, column) | Zwraca Cell według wiersza/kolumny indeksowanych od zera |
Cell.putValue(value) | Zapisuje wartość w komórce |
Cell.getValue() | Odczytuje wartość komórki jako Object |
Cell.getStringValue() | Odczytuje wartość komórki jako String |
Cell.setFormula(formula) | Ustawia ciąg formuły (np. “=SUM(A1:A2)”) |
LoadOptions | Konfiguracja ładowania skoroszytu |
SaveFormat | Wyliczenie stałych formatów (format jest wywnioskowany z rozszerzenia pliku; nie jest przekazywany do save()) |