Práce se Správou tabulek

Práce s řízením tabulek

Tento průvodce ukazuje, jak vytvářet, načítat, upravovat a ukládat sešity Excelu pomocí Aspose.Cells FOSS pro Java. Naučíte se pracovat s třídami Workbook, WorksheetCollection, Worksheet, Cells a Cell pro komplexní správu tabulek.


Vytvoření nového sešitu

Použijte konstruktor bez argumentů k vytvoření prázdného sešitu. Jediný prázdný list pojmenovaný Sheet1 je přidán automaticky.

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

Načtení sešitu ze souboru

Předávejte cestu k souboru do konstruktoru Workbook(fileName) pro otevření existujícího souboru .xlsx nebo .ods. Použijte Workbook(fileName, options) k zadání LoadOptions, pokud potřebujete řídit detekci formátu nebo zacházení s heslem.

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);

Načtení sešitu ze streamu

Workbook(stream) a Workbook(stream, options) přijímají jakýkoli java.io.InputStream. To je užitečné, když soubor pochází ze síťového zdroje, databázového BLOBu nebo z pole bajtů v paměti.

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());
}

Přístup a správa pracovních listů

Workbook.getWorksheets() vrací WorksheetCollection. Získejte listy podle indexu nebo podle názvu, procházejte všechny listy a podle potřeby přidávejte nebo odstraňujte listy.

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

Čtení a zápis hodnot buněk

Navigujte k buňce pomocí Worksheet.getCells(), která vrací kolekci Cells. Získejte Cell podle názvu (např. "A1") nebo podle nulového indexu řádku/sloupce. Použijte putValue() k zápisu primitivních hodnot a getValue() / getStringValue() k jejich načtení.

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

Nastavení vzorců v buňkách

Přiřaďte řetězec vzorce buňce pomocí setFormula(). Aspose.Cells vyhodnocuje vzorce při uložení sešitu nebo když je výpočet spuštěn explicitně.

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)

Ukládání sešitu

Použijte Workbook.save(fileName) k zápisu sešitu na disk. Výstupní formát je určen příponou souboru; použijte .xlsx pro Excel sešity.

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");

Uvolňování prostředků

Workbook implementuje AutoCloseable. Použijte blok try-with-resources, aby byly interní prostředky sešitu uvolněny okamžitě po použití.

import com.aspose.cells.foss.Workbook;

try (Workbook workbook = new Workbook("data/large.xlsx")) {
    workbook.save("output/large_modified.xlsx");
}
// workbook.close() called automatically

Tipy a osvědčené postupy

  • Vždy používejte try-with-resources (try (Workbook wb = new Workbook(...))) pro velké soubory, abyste se vyhnuli držení otevřených souborových deskriptorů.
  • Upřednostněte cells.get(row, column) před cells.get(cellName) v náročných smyčkách; přetížení s celým číslem zabraňuje opakovanému parsování názvů buněk.
  • Zavolejte workbook.getWorksheets().getCount() před přístupem k listům podle indexu, abyste se vyhnuli IndexOutOfBoundsException.
  • Pojmenujte své listy explicitně pomocí setName() po add(), aby následný kód mohl vyhledávat podle názvu místo křehkého indexu.
  • Nespoléhejte se na výsledky vzorců ihned po setFormula(); nejprve uložte nebo znovu načtěte, pokud potřebujete vypočtené hodnoty ve stejné relaci.

Běžné problémy

ProblémPříčinaOprava
WorkbookLoadException na new Workbook(fileName)Cesta k souboru je nesprávná nebo je soubor uzamčenOvěřte, že cesta existuje a je čitelná; zavřete ostatní aplikace, které soubor drží
get(index) vyhazuje IndexOutOfBoundsExceptionIndex listu přesahuje getCount() - 1Zkontrolujte sheets.getCount() před přístupem; použijte add() k vytvoření nového listu
Buňka s formulí vrací prázdné getValue()Vzorce nejsou automaticky vypočítány v pamětiUložte sešit a znovu jej načtěte, abyste získali výsledky vzorců
Výstupní soubor je po save() poškozenNesprávná přípona souboruUjistěte se, že název souboru končí na .xlsx; formát je odvozen z přípony

FAQ

Jak přejmenuji list?

Získejte objekt Worksheet podle indexu z WorksheetCollection a zavolejte setName(name) s novým zobrazovaným názvem:

workbook.getWorksheets().get(0).setName("Sales Data");

Jak zjistím, kolik listů má sešit?

Zavolejte getCount() na WorksheetCollection vrácený Workbook.getWorksheets(), abyste získali celkový počet listů:

int count = workbook.getWorksheets().getCount();

Mohu přidat více listů v jednom volání?

Ne. Zavolejte worksheets.add(sheetName) jednou na list. Každé volání vrátí index nově vytvořeného listu.

Jak mohu zkontrolovat typ hodnoty buňky?

Získejte Cell podle názvu a zavolejte getType(), který vrací výčtovou hodnotu CellValueType:

Cell cell = cells.get("A1");
System.out.println(cell.getType()); // CellValueType enum value

API Reference Shrnutí

Třída / MetodaPopis:
Workbook()Vytvoří prázdný sešit s jedním prázdným listem
Workbook(fileName)Načte sešit z cesty k souboru
Workbook(stream)Načte sešit z InputStream
Workbook(fileName, options)Načte sešit s LoadOptions
Workbook.getWorksheets()Vrátí WorksheetCollection
Workbook.save(fileName)Uloží do souboru (formát odvozen od přípony)
Workbook.save(stream, format)Uloží do proudu s explicitním SaveFormat
WorksheetCollection.get(index)Vrátí list podle indexu začínajícího nulou
WorksheetCollection.get(name)Vrátí list podle názvu
WorksheetCollection.add(sheetName)Přidá pojmenovaný list; vrátí jeho index
WorksheetCollection.getCount()Počet listů v sešitu
WorksheetCollection.removeAt(sheetName)Odstraní list podle názvu
Worksheet.getCells()Vrací kolekci Cells pro tento list
Worksheet.getName() / setName()Získá nebo nastaví název listu
Cells.get(cellName)Vrátí Cell podle názvu (např. “A1”)
Cells.get(row, column)Vrací Cell podle řádku a sloupce číslovaných od nuly
Cell.putValue(value)Zapíše hodnotu do buňky
Cell.getValue()Načte hodnotu buňky jako Object
Cell.getStringValue()Načte hodnotu buňky jako String
Cell.setFormula(formula)Nastaví řetězec vzorce (např. “=SUM(A1:A2)”)
LoadOptionsKonfigurace pro načítání sešitu
SaveFormatVýčet konstant formátu (formát je odvozen z přípony souboru; nepředává se do save())

Viz také:

 Čeština