Como carregar uma planilha no .NET

Como carregar uma planilha no .NET

Aspose.Cells FOSS for .NET permite abrir planilhas XLSX existentes com uma única chamada ao construtor e fornece um caminho de carregamento tolerante a falhas para arquivos que apresentam pequenas corrupções estruturais. Instale a biblioteca a partir do NuGet com dotnet add package Aspose.Cells_FOSS.

Guia passo a passo

Etapa 1: Instalar o Pacote

dotnet add package Aspose.Cells_FOSS

Verifique se o pacote está presente:

dotnet list package | grep Aspose.Cells_FOSS

Etapa 2: Importar o Namespace

Adicione esta diretiva no início do seu arquivo C#:

using Aspose.Cells_FOSS;

Etapa 3: Carregar um arquivo XLSX

Passe o caminho do arquivo para o construtor Workbook. A biblioteca lê o arquivo XLSX e preenche o objeto de pasta de trabalho na memória.

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

Etapa 4: Carregar com Opções de Reparação Tolerante a Falhas

Para arquivos que podem ter corrupção ZIP ou XML, forneça um objeto LoadOptions com TryRepairPackage e TryRepairXml definidos como true. Envolva a chamada em um try/catch para WorkbookLoadException caso o arquivo seja irrecuperável.

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

Etapa 5: Verificar Diagnósticos de Carregamento

Após o carregamento, inspecione Workbook.LoadDiagnostics para ver se a biblioteca aplicou alguma reparação. HasRepairs é true se alguma reparação foi aplicada; HasDataLossRisk é true se os dados podem ter sido descartados. Itere Issues para acessar registros individuais de 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.");
}

Etapa 6: Acessar Dados da Planilha

Após o carregamento, acesse as planilhas por índice ou nome e leia os valores das células usando Cell.StringValue ou 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);

Problemas Comuns e Soluções

WorkbookLoadException é lançada mesmo com as opções de reparo ativadas.
Isso significa que a estrutura ZIP do arquivo está muito danificada para que os algoritmos de reparo a recuperem. Verifique se o arquivo é um arquivo ZIP válido (por exemplo, tente unzip -t file.xlsx). Se o arquivo estiver completamente corrompido, ele não pode ser aberto por nenhuma biblioteca.

O workbook carregado tem menos planilhas do que o esperado. Uma operação de reparo pode ter removido planilhas que referenciavam partes ausentes. Verifique LoadDiagnostics.Issues para entradas com DataLossRisk = true e notifique o usuário.

Os valores das células estão vazios após o carregamento.
Certifique-se de que está acessando o índice ou nome da planilha correto. Use wb.Worksheets.Count para confirmar o número esperado de planilhas. Também verifique se o arquivo XLSX não está protegido por senha (arquivos protegidos por senha não são suportados atualmente).

Workbook o construtor trava em um arquivo grande.
O construtor é síncrono e carrega todo o arquivo na memória. Para arquivos muito grandes, execute o carregamento em uma thread em segundo plano para manter a interface responsiva.

DiagnosticEntry.Severity mostra Error mas HasRepairs é false. HasRepairs reflete se uma reparação foi aplicada com sucesso, não se erros foram detectados. Uma entrada de gravidade Error com RepairApplied = false significa que o problema foi detectado mas não pôde ser reparado — trate isso como um possível aviso de integridade de dados.

Perguntas Frequentes

Posso carregar um arquivo XLSX a partir de um Stream em vez de um caminho de arquivo?

Sim. O construtor Workbook tem sobrecargas que aceitam um objeto Stream. Passe seu stream junto com uma instância LoadOptions se for necessário um carregamento tolerante a falhas.

A biblioteca suporta o carregamento de arquivos XLSX protegidos por senha?

Arquivos protegidos por senha não estão na superfície atual da API. Tentar carregar um resultará em um WorkbookLoadException.

Como verifico qual planilha está ativa na pasta de trabalho carregada?

Leia Workbook.Worksheets.ActiveSheetName para obter o nome da planilha que estava ativa pela última vez quando o arquivo foi salvo.

Posso carregar vários arquivos XLSX simultaneamente?

Sim. Cada instância Workbook é independente. Você pode instanciar múltiplos objetos Workbook em threads separadas sem estado compartilhado.

O que acontece se uma célula de fórmula for carregada e o resultado em cache estiver ausente?

Cell.StringValue retorna uma string vazia. Cell.Formula ainda retorna a string da fórmula. O valor em cache é preenchido somente quando o Excel (ou um aplicativo compatível) abre e salva o arquivo.

Veja também

 Português