Lavorare con la gestione dei fogli di calcolo
Lavorare con la gestione dei fogli di calcolo
Questa guida mostra come creare, caricare, modificare e salvare cartelle di lavoro Excel utilizzando Aspose.Cells FOSS per Java. Imparerai a lavorare con le classi Workbook, WorksheetCollection, Worksheet, Cells e Cell per una gestione completa dei fogli di calcolo.
Creare una nuova cartella di lavoro
Utilizza il costruttore senza argomenti per creare una cartella di lavoro vuota. Un singolo foglio vuoto chiamato Sheet1 viene aggiunto automaticamente.
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()); // Sheet1Caricamento di una cartella di lavoro da un file
Passa un percorso file al costruttore Workbook(fileName) per aprire un file .xlsx o .ods esistente. Usa Workbook(fileName, options) per fornire LoadOptions quando è necessario controllare il rilevamento del formato o la gestione della password.
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);Caricamento di una cartella di lavoro da uno stream
Workbook(stream) e Workbook(stream, options) accettano qualsiasi java.io.InputStream. Questo è utile quando il file proviene da una risorsa di rete, da un BLOB di database o da un array di byte in memoria.
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());
}Accesso e gestione dei fogli di lavoro
Workbook.getWorksheets() restituisce un WorksheetCollection. Recupera i fogli per indice o per nome, itera su tutti i fogli e aggiungi o rimuovi i fogli secondo necessità.
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());Lettura e scrittura dei valori delle celle
Naviga a una cella usando Worksheet.getCells(), che restituisce una collezione Cells. Recupera un Cell per nome (ad esempio "A1") o per indice di riga/colonna a base zero. Usa putValue() per scrivere valori primitivi e getValue() / getStringValue() per leggerli.
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()); // 1200Impostazione delle formule delle celle
Assegna una stringa di formula a una cella tramite setFormula(). Aspose.Cells valuta le formule quando la cartella di lavoro viene salvata o quando il calcolo viene attivato esplicitamente.
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)Salvataggio di una cartella di lavoro
Usa Workbook.save(fileName) per scrivere la cartella di lavoro su disco. Il formato di output è determinato dall’estensione del file; usa .xlsx per le cartelle di lavoro 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");Rilascio delle risorse
Workbook implementa AutoCloseable. Usa un blocco try-with-resources per garantire che le risorse interne della cartella di lavoro vengano rilasciate prontamente dopo l’uso.
import com.aspose.cells.foss.Workbook;
try (Workbook workbook = new Workbook("data/large.xlsx")) {
workbook.save("output/large_modified.xlsx");
}
// workbook.close() called automaticallySuggerimenti e migliori pratiche
- Usa sempre try-with-resources (
try (Workbook wb = new Workbook(...))) per file di grandi dimensioni per evitare di tenere aperti i handle dei file. - Preferisci
cells.get(row, column)rispetto acells.get(cellName)nei cicli critici; la sovraccarico intera evita il parsing ripetuto dei nomi delle celle. - Chiama
workbook.getWorksheets().getCount()prima di accedere ai fogli per indice per evitareIndexOutOfBoundsException. - Assegna ai tuoi fogli un nome esplicito con
setName()dopoadd()in modo che il codice a valle possa cercarli per nome anziché per indice fragile. - Non fare affidamento sui risultati delle formule subito dopo
setFormula(); salva prima o ricarica se hai bisogno dei valori calcolati nella stessa sessione.
Problemi comuni
| Problema | Causa | Correzione |
|---|---|---|
WorkbookLoadException su new Workbook(fileName) | Percorso del file errato o file bloccato | Verifica che il percorso esista e sia leggibile; chiudi le altre applicazioni che tengono il file |
get(index) lancia IndexOutOfBoundsException | Indice del foglio oltre getCount() - 1 | Verifica sheets.getCount() prima di accedere; usa add() per creare un nuovo foglio |
La cella della formula restituisce getValue() vuoto | Le formule non vengono calcolate automaticamente in memoria | Salva la cartella di lavoro e ricaricala per ottenere i risultati delle formule |
Il file di output è corrotto dopo save() | Estensione del file errata | Assicurati che il nome del file termini con .xlsx; il formato è dedotto dall’estensione |
FAQ
Come rinominare un foglio di lavoro?
Recupera l’oggetto Worksheet per indice da WorksheetCollection e chiama setName(name) con il nuovo nome visualizzato:
workbook.getWorksheets().get(0).setName("Sales Data");Come verificare quanti fogli ha una cartella di lavoro?
Chiama getCount() sul WorksheetCollection restituito da Workbook.getWorksheets() per ottenere il numero totale di fogli di lavoro:
int count = workbook.getWorksheets().getCount();Posso aggiungere più fogli in una singola chiamata?
No. Chiama worksheets.add(sheetName) una volta per foglio. Ogni chiamata restituisce l’indice del foglio appena creato.
Come verificare il tipo di un valore di cella?
Recupera il Cell per nome e chiama getType(), che restituisce un valore enum CellValueType:
Cell cell = cells.get("A1");
System.out.println(cell.getType()); // CellValueType enum valueAPI Reference Riepilogo
| Classe / Metodo | Descrizione |
|---|---|
Workbook() | Crea una cartella di lavoro vuota con un foglio vuoto |
Workbook(fileName) | Carica una cartella di lavoro da un percorso di file |
Workbook(stream) | Carica una cartella di lavoro da un InputStream |
Workbook(fileName, options) | Carica una cartella di lavoro con LoadOptions |
Workbook.getWorksheets() | Restituisce il WorksheetCollection |
Workbook.save(fileName) | Salva su un file (formato dedotto dall’estensione) |
Workbook.save(stream, format) | Salva su uno stream con SaveFormat esplicito |
WorksheetCollection.get(index) | Restituisce il foglio mediante indice a base zero |
WorksheetCollection.get(name) | Restituisce il foglio per nome |
WorksheetCollection.add(sheetName) | Aggiunge un foglio con nome; restituisce il suo indice |
WorksheetCollection.getCount() | Numero di fogli nella cartella di lavoro |
WorksheetCollection.removeAt(sheetName) | Rimuove un foglio per nome |
Worksheet.getCells() | Restituisce la collezione Cells per questo foglio |
Worksheet.getName() / setName() | Ottiene o imposta il nome della scheda del foglio |
Cells.get(cellName) | Restituisce un Cell per nome (ad es. “A1”) |
Cells.get(row, column) | Restituisce un Cell per riga/colonna indicizzati a zero |
Cell.putValue(value) | Scrive un valore nella cella |
Cell.getValue() | Legge il valore della cella come Object |
Cell.getStringValue() | Legge il valore della cella come un String |
Cell.setFormula(formula) | Imposta una stringa di formula (ad es. “=SUM(A1:A2)”) |
LoadOptions | Configurazione per il caricamento della cartella di lavoro |
SaveFormat | Enum dei costanti di formato (il formato è dedotto dall’estensione del file; non viene passato a save()) |