Arbeiten mit Spreadsheet Management
Arbeiten mit der Tabellenkalkulationsverwaltung
Dieser Leitfaden zeigt, wie man Excel-Arbeitsmappen mit Aspose.Cells FOSS für Java erstellt, lädt, ändert und speichert. Sie lernen, wie man mit den Klassen Workbook, WorksheetCollection, Worksheet, Cells und Cell für die durchgängige Tabellenkalkulationsverwaltung arbeitet.
Erstellen einer neuen Arbeitsmappe
Verwenden Sie den Konstruktor ohne Argumente, um eine leere Arbeitsmappe zu erstellen. Ein einzelnes leeres Arbeitsblatt mit dem Namen Sheet1 wird automatisch hinzugefügt.
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()); // Sheet1Laden einer Arbeitsmappe aus einer Datei
Übergeben Sie einen Dateipfad an den Workbook(fileName)-Konstruktor, um eine vorhandene .xlsx- oder .ods-Datei zu öffnen. Verwenden Sie Workbook(fileName, options), um LoadOptions bereitzustellen, wenn Sie die Formaterkennung oder die Passwortbehandlung steuern müssen.
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);Laden einer Arbeitsmappe aus einem Stream
Workbook(stream) und Workbook(stream, options) akzeptieren jedes java.io.InputStream. Das ist nützlich, wenn die Datei aus einer Netzwerkressource, einem Datenbank-BLOB oder einem im Speicher befindlichen Byte-Array stammt.
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());
}Zugriff auf und Verwaltung von Arbeitsblättern
Workbook.getWorksheets() gibt ein WorksheetCollection zurück. Rufen Sie Arbeitsblätter nach Index oder nach Name ab, iterieren Sie über alle Arbeitsblätter und fügen Sie bei Bedarf Arbeitsblätter hinzu oder entfernen Sie sie.
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());Lesen und Schreiben von Zellenwerten
Navigieren Sie zu einer Zelle mit Worksheet.getCells(), das eine Cells-Sammlung zurückgibt. Rufen Sie ein Cell nach Namen (z.B. "A1") oder nach nullbasiertem Zeilen-/Spalten-Index ab. Verwenden Sie putValue(), um primitive Werte zu schreiben, und getValue() / getStringValue(), um sie wieder zu lesen.
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()); // 1200Festlegen von Zellformeln
Weisen Sie einer Zelle über setFormula() eine Formelzeichenfolge zu. Aspose.Cells wertet Formeln aus, wenn die Arbeitsmappe gespeichert wird oder wenn die Berechnung explizit ausgelöst wird.
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)Speichern einer Arbeitsmappe
Verwenden Sie Workbook.save(fileName), um die Arbeitsmappe auf die Festplatte zu schreiben. Das Ausgabeformat wird durch die Dateierweiterung bestimmt; verwenden Sie .xlsx für Excel-Arbeitsmappen.
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");Ressourcen freigeben
Workbook implementiert AutoCloseable. Verwenden Sie einen try-with-resources-Block, um sicherzustellen, dass die internen Ressourcen der Arbeitsmappe nach der Verwendung umgehend freigegeben werden.
import com.aspose.cells.foss.Workbook;
try (Workbook workbook = new Workbook("data/large.xlsx")) {
workbook.save("output/large_modified.xlsx");
}
// workbook.close() called automaticallyTipps und bewährte Vorgehensweisen
- Verwenden Sie stets try-with-resources (
try (Workbook wb = new Workbook(...))) für große Dateien, um zu vermeiden, dass Dateihandles offen bleiben. - Bevorzugen Sie
cells.get(row, column)gegenübercells.get(cellName)in heißen Schleifen; die Integer-Überladung vermeidet wiederholtes Parsen von Zellnamen. - Rufen Sie
workbook.getWorksheets().getCount()auf, bevor Sie über den Index auf Tabellenblätter zugreifen, umIndexOutOfBoundsExceptionzu vermeiden. - Benennen Sie Ihre Tabellenblätter explizit mit
setName()nachadd(), damit nachgelagerter Code sie anhand ihres Namens statt über einen fragilen Index finden kann. - Verlassen Sie sich nicht sofort nach
setFormula()auf Formelergebnisse; speichern Sie zuerst oder laden Sie neu, wenn Sie in derselben Sitzung berechnete Werte benötigen.
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
WorkbookLoadException auf new Workbook(fileName) | Dateipfad ist falsch oder Datei gesperrt | Stellen Sie sicher, dass der Pfad existiert und lesbar ist; schließen Sie andere Anwendungen, die die Datei halten |
get(index) wirft IndexOutOfBoundsException | Blattindex überschreitet getCount() - 1 | Überprüfen Sie sheets.getCount() vor dem Zugriff; verwenden Sie add(), um ein neues Blatt zu erstellen |
Formelzelle gibt leeres getValue() zurück | Formeln werden im Speicher nicht automatisch berechnet | Speichern Sie die Arbeitsmappe und laden Sie sie erneut, um die Formelergebnisse zu erhalten |
Ausgabedatei ist nach save() beschädigt | Falsche Dateierweiterung | Stellen Sie sicher, dass der Dateiname mit .xlsx endet; das Format wird aus der Erweiterung abgeleitet |
FAQ
Wie benenne ich ein Arbeitsblatt um?
Rufen Sie das Worksheet-Objekt anhand des Index aus WorksheetCollection ab und rufen Sie setName(name) mit dem neuen Anzeigenamen auf:
workbook.getWorksheets().get(0).setName("Sales Data");Wie prüfe ich, wie viele Arbeitsblätter eine Arbeitsmappe hat?
Rufen Sie getCount() auf dem von Workbook.getWorksheets() zurückgegebenen WorksheetCollection auf, um die Gesamtzahl der Arbeitsblätter zu erhalten:
int count = workbook.getWorksheets().getCount();Kann ich mehrere Arbeitsblätter in einem Aufruf hinzufügen?
Nr. Rufen Sie worksheets.add(sheetName) einmal pro Blatt auf. Jeder Aufruf gibt den Index des neu erstellten Blatts zurück.
Wie prüfe ich den Typ eines Zellenwerts?
Rufen Sie das Cell anhand des Namens ab und rufen Sie getType() auf, das einen CellValueType-Enum-Wert zurückgibt:
Cell cell = cells.get("A1");
System.out.println(cell.getType()); // CellValueType enum valueAPI Reference Zusammenfassung
| Klasse / Methode | Beschreibung |
|---|---|
Workbook() | Erstellt eine leere Arbeitsmappe mit einem leeren Blatt |
Workbook(fileName) | Lädt eine Arbeitsmappe aus einem Dateipfad |
Workbook(stream) | Lädt eine Arbeitsmappe von einem InputStream |
Workbook(fileName, options) | Lädt eine Arbeitsmappe mit LoadOptions |
Workbook.getWorksheets() | Gibt das WorksheetCollection zurück |
Workbook.save(fileName) | Speichert in einer Datei (Format wird aus der Erweiterung abgeleitet) |
Workbook.save(stream, format) | Speichert in einen Stream mit explizitem SaveFormat |
WorksheetCollection.get(index) | Gibt das Blatt anhand eines nullbasierten Index zurück |
WorksheetCollection.get(name) | Gibt das Blatt nach Namen zurück |
WorksheetCollection.add(sheetName) | Fügt ein benanntes Blatt hinzu; gibt dessen Index zurück |
WorksheetCollection.getCount() | Anzahl der Blätter in der Arbeitsmappe |
WorksheetCollection.removeAt(sheetName) | Entfernt ein Blatt nach Namen |
Worksheet.getCells() | Gibt die Cells-Sammlung für dieses Blatt zurück |
Worksheet.getName() / setName() | Ruft den Namen des Tabellenblatts ab oder legt ihn fest |
Cells.get(cellName) | Gibt ein Cell anhand des Namens zurück (z.B. “A1”) |
Cells.get(row, column) | Gibt ein Cell anhand einer nullbasierten Zeile/Spalte zurück |
Cell.putValue(value) | Schreibt einen Wert in die Zelle |
Cell.getValue() | Liest den Zellenwert als Object |
Cell.getStringValue() | Liest den Zellenwert als ein String |
Cell.setFormula(formula) | Setzt eine Formelzeichenkette (z.B. “=SUM(A1:A2)”) |
LoadOptions | Konfiguration für das Laden von Arbeitsmappen |
SaveFormat | Aufzählung von Formatkonstanten (Format wird aus der Dateierweiterung abgeleitet; nicht an save() übergeben) |