Praca z zarządzaniem arkuszami

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()); // Sheet1

Wczytywanie 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());       // 1200

Ustawianie 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 automatically

Wskazó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) zamiast cells.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() po add(), 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

ProblemPrzyczynaNaprawa
WorkbookLoadException na new Workbook(fileName)Ścieżka do pliku niepoprawna lub plik zablokowanySprawdź, czy ścieżka istnieje i jest czytelna; zamknij inne aplikacje trzymające plik
get(index) rzuca IndexOutOfBoundsExceptionIndeks arkusza przekracza getCount() - 1Sprawdź 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ęciZapisz skoroszyt i ponownie go wczytaj, aby uzyskać wyniki formuł
Plik wyjściowy jest uszkodzony po save()Nieprawidłowe rozszerzenie plikuUpewnij 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 value

API Reference Podsumowanie

Klasa / MetodaOpis
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)”)
LoadOptionsKonfiguracja ładowania skoroszytu
SaveFormatWyliczenie stałych formatów (format jest wywnioskowany z rozszerzenia pliku; nie jest przekazywany do save())

Zobacz także

 Polski