Come caricare un foglio di calcolo in .NET

Come caricare un foglio di calcolo in .NET

Aspose.Cells FOSS per .NET consente di aprire fogli di calcolo XLSX esistenti con una singola chiamata al costruttore e fornisce un percorso di caricamento tollerante agli errori per i file che presentano lievi corruzioni strutturali. Installa la libreria da NuGet con dotnet add package Aspose.Cells_FOSS.

Guida passo-passo

Passo 1: Installa il pacchetto

dotnet add package Aspose.Cells_FOSS

Verifica che il pacchetto sia presente:

dotnet list package | grep Aspose.Cells_FOSS

Passo 2: Importa il Namespace

Aggiungi questa direttiva all’inizio del tuo file C#:

using Aspose.Cells_FOSS;

Passo 3: Carica un file XLSX

Passa il percorso del file al costruttore Workbook. La libreria legge il file XLSX e popola l’oggetto workbook in memoria.

using Aspose.Cells_FOSS;

var wb = new Workbook("data.xlsx");
Console.WriteLine("Loaded " + wb.Worksheets.Count + " sheet(s)");
Console.WriteLine("First sheet: " + wb.Worksheets[0].Name);
Console.WriteLine("A1 value: " + wb.Worksheets[0].Cells["A1"].StringValue);

Passo 4: Carica con opzioni di riparazione tolleranti ai guasti

Per i file che potrebbero presentare corruzione ZIP o XML, fornire un oggetto LoadOptions con TryRepairPackage e TryRepairXml impostati su true. Avvolgere la chiamata in un try/catch per WorkbookLoadException nel caso in cui il file sia irrecuperabile.

using Aspose.Cells_FOSS;

var opts = new LoadOptions
{
    TryRepairPackage = true,
    TryRepairXml = true,
};

try
{
    var wb = new Workbook("possibly-corrupt.xlsx", opts);
    Console.WriteLine("Loaded successfully");
}
catch (WorkbookLoadException ex)
{
    Console.WriteLine("Unrecoverable file: " + ex.Message);
}

Passo 5: Verifica le diagnostiche di caricamento

Dopo il caricamento, ispeziona Workbook.LoadDiagnostics per vedere se la libreria ha applicato delle riparazioni. HasRepairs è true se è stata applicata una riparazione; HasDataLossRisk è true se i dati potrebbero essere stati scartati. Itera Issues per accedere ai singoli record DiagnosticEntry.

using Aspose.Cells_FOSS;

var opts = new LoadOptions { TryRepairPackage = true, TryRepairXml = true };
var wb = new Workbook("file.xlsx", opts);
var diag = wb.LoadDiagnostics;

if (diag.HasRepairs)
{
    Console.WriteLine("Repairs were applied. Data loss risk: " + diag.HasDataLossRisk);
    foreach (var entry in diag.Issues)
        Console.WriteLine($"  [{entry.Severity}] {entry.Code}: {entry.Message}");
}
else
{
    Console.WriteLine("File loaded cleanly — no repairs.");
}

Passo 6: Accedi ai dati del foglio di lavoro

Dopo il caricamento, accedi ai fogli di lavoro per indice o nome e leggi i valori delle celle usando Cell.StringValue o Cell.Value.

using Aspose.Cells_FOSS;

var wb = new Workbook("data.xlsx");

// By index
var sheet = wb.Worksheets[0];
Console.WriteLine("Sheet: " + sheet.Name);
Console.WriteLine("A1: " + sheet.Cells["A1"].StringValue);

// By name
var named = wb.Worksheets["Report"];
if (named != null)
    Console.WriteLine("Report!B2: " + named.Cells["B2"].StringValue);

Problemi comuni e soluzioni

WorkbookLoadException viene generato anche con le opzioni di riparazione abilitate.
Questo significa che la struttura ZIP del file è troppo danneggiata perché gli algoritmi di riparazione possano recuperarlo. Verifica che il file sia un archivio ZIP valido (ad es. prova unzip -t file.xlsx). Se il file è completamente corrotto, non può essere aperto da alcuna libreria.

Il workbook caricato ha meno fogli del previsto. Un’operazione di riparazione potrebbe aver rimosso i fogli di lavoro che facevano riferimento a parti mancanti. Controlla LoadDiagnostics.Issues per le voci con DataLossRisk = true e avvisa l’utente.

I valori delle celle sono vuoti dopo il caricamento.
Assicurati di accedere all’indice o al nome del foglio di lavoro corretto. Usa wb.Worksheets.Count per confermare il numero previsto di fogli. Verifica inoltre che il file XLSX non sia protetto da password (i file protetti da password non sono attualmente supportati).

Workbook il costruttore si blocca con un file di grandi dimensioni.
Il costruttore è sincrono e carica l’intero file in memoria. Per file molto grandi, esegui il caricamento su un thread in background per mantenere l’interfaccia utente reattiva.

DiagnosticEntry.Severity mostra Error ma HasRepairs è false. HasRepairs riflette se una riparazione è stata applicata con successo, non se sono stati rilevati errori. Una voce di gravità Error con RepairApplied = false significa che il problema è stato rilevato ma non è stato possibile ripararlo — trattalo come un possibile avviso di integrità dei dati.

Domande Frequenti

Posso caricare un file XLSX da uno Stream invece di un percorso file?

Sì. Il costruttore Workbook ha overloads che accettano un oggetto Stream. Passa il tuo stream insieme a un’istanza LoadOptions se è necessario un caricamento tollerante ai guasti.

La libreria supporta il caricamento di file XLSX protetti da password?

I file protetti da password non sono presenti nella superficie API corrente. Tentare di caricarne uno genererà un WorkbookLoadException.

Come faccio a verificare quale foglio è attivo nella cartella di lavoro caricata?

Leggi Workbook.Worksheets.ActiveSheetName per ottenere il nome del foglio che era attivo per ultimo quando il file è stato salvato.

Posso caricare più file XLSX contemporaneamente?

Sì. Ogni istanza Workbook è indipendente. È possibile istanziare più oggetti Workbook su thread separati senza stato condiviso.

Cosa succede se una cella di formula viene caricata e il risultato memorizzato nella cache è assente?

Cell.StringValue restituisce una stringa vuota. Cell.Formula restituisce ancora la stringa della formula. Il valore memorizzato nella cache viene popolato solo quando Excel (o un’applicazione compatibile) apre e salva il file.

Vedi anche

 Italiano