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()); // Sheet1Nač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()); // 1200Nastavení 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 automaticallyTipy 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ředcells.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 vyhnuliIndexOutOfBoundsException. - Pojmenujte své listy explicitně pomocí
setName()poadd(), 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ém | Příčina | Oprava |
|---|---|---|
WorkbookLoadException na new Workbook(fileName) | Cesta k souboru je nesprávná nebo je soubor uzamčen | Ověřte, že cesta existuje a je čitelná; zavřete ostatní aplikace, které soubor drží |
get(index) vyhazuje IndexOutOfBoundsException | Index listu přesahuje getCount() - 1 | Zkontrolujte 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ěti | Uložte sešit a znovu jej načtěte, abyste získali výsledky vzorců |
Výstupní soubor je po save() poškozen | Nesprávná přípona souboru | Ujistě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 valueAPI Reference Shrnutí
| Třída / Metoda | Popis: |
|---|---|
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)”) |
LoadOptions | Konfigurace pro načítání sešitu |
SaveFormat | Výčet konstant formátu (formát je odvozen z přípony souboru; nepředává se do save()) |