Indice
Installa con Nuget
Install-Package Spire.XLS
Link Correlati
La lettura di file Excel in C# è un requisito comune per molte applicazioni, sia per l'analisi dei dati, la reportistica o l'integrazione di database. Sebbene sia possibile utilizzare le librerie Interop di Microsoft, esse presentano delle limitazioni (come la necessità che Excel sia installato). Esploreremo invece un approccio più efficiente utilizzando Spire.XLS, una libreria .NET che consente di leggere e scrivere file Excel senza Interop. Questo articolo tratta:
- Libreria C# .NET per Leggere Excel Senza Interop
- Come Leggere un File Excel in C#
- Leggere Dati Excel in una DataTable
- Leggere Dati Excel in un Database
- Conclusione
- Domande Frequenti
Libreria C# .NET per Leggere Excel Senza Interop
L'Interop di Excel di Microsoft richiede che Excel sia installato sulla macchina, rendendolo inadatto per le applicazioni lato server. Invece, librerie come Spire.XLS offrono una soluzione leggera e ad alte prestazioni senza dipendenze da Excel.
Perché usare Spire.XLS?
- Nessuna Installazione di Excel Richiesta – Funziona in modo indipendente.
- Supporta .NET Core e .NET Framework – Compatibilità multipiattaforma.
- Leggi/Scrivi File Excel – Supporta .xls, .xlsx e .xlsm.
- Importa in DataTable e Database – Integrazione perfetta con ADO.NET.
Installazione di Spire.XLS
Per iniziare, installa la libreria tramite il NuGet Package Manager:
Install-Package Spire.XLS
In alternativa, puoi scaricare Spire.XLS per .NET dal nostro sito ufficiale e fare riferimento manualmente al file DLL.
Come Leggere un File Excel in C#
Questa sezione dimostra come leggere un file Excel in C# utilizzando la libreria Spire.XLS. Il processo prevede il caricamento del file, l'accesso ai fogli di lavoro e il recupero programmatico dei valori delle celle. Ciò è utile per automatizzare l'estrazione dei dati, elaborare report di Excel o integrare i dati dei fogli di calcolo nelle applicazioni.
Passaggio 1. Importa lo Spazio dei Nomi Necessario
Per utilizzare la funzionalità di Spire.XLS, è necessario importare il suo spazio dei nomi. Ciò dà accesso a classi come Workbook e Worksheet, che sono essenziali per le operazioni sui file Excel.
- C#
using Spire.Xls;
Passaggio 2. Carica un File Excel
Per caricare un file Excel, crea un oggetto Workbook e chiama il metodo LoadFromFile. Questo legge il file in memoria, consentendo ulteriori manipolazioni.
- C#
Workbook wb = new Workbook();
wb.LoadFromFile("input.xlsx");
Passaggio 3. Ottieni un Foglio di Lavoro Specifico
I file Excel possono contenere più fogli di lavoro. È possibile accedere a un foglio specifico indicizzando la raccolta Worksheets (in base zero). Il primo foglio si trova all'indice 0, il secondo all'1, e così via.
- C#
Worksheet sheet = wb.Worksheets[0]; //Primo foglio
Passaggio 4. Recupera il Valore di una Cella Specifica
Per recuperare il valore di una cella, utilizzare la proprietà CellRange.Value. Specificare gli indici di riga e colonna (a partire da 1) per individuare la cella. Ciò è utile per estrarre dati strutturati come intestazioni o record individuali.
- C#
CellRange cell = sheet.Range[1, 1]; // Riga 1, Colonna 1 (A1)
string value = cell.Value;
Di seguito è riportato un esempio completo di lettura dei dati da un intero foglio di lavoro e della loro stampa sulla console:
- C#
using Spire.Xls;
namespace ReadExcelData
{
class Program
{
static void Main(string[] args)
{
// Crea un oggetto Workbook
Workbook wb = new Workbook();
// Carica un file Excel esistente
wb.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
// Ottieni il primo foglio di lavoro
Worksheet sheet = wb.Worksheets[0];
// Ottieni l'intervallo di celle contenente i dati
CellRange locatedRange = sheet.AllocatedRange;
// Itera attraverso le righe
for (int i = 0; i < locatedRange.Rows.Length; i++)
{
// Itera attraverso le colonne
for (int j = 0; j < locatedRange.Rows[i].ColumnCount; j++)
{
// Ottieni i dati di una cella specifica
string cellValue = locatedRange[i + 1, j + 1].Value?.ToString() ?? "N/A";
// Allinea l'output con una larghezza di 22
Console.Write($"{cellValue,-22}");
}
Console.WriteLine();
}
}
}
}
Risultato:

Leggi i Dati di Excel in una DataTable
L'esportazione dei dati di Excel in una DataTable consente un'integrazione perfetta con i controlli dell'interfaccia utente come DataGridView o l'elaborazione dei dati di backend. Spire.XLS semplifica questo processo con il suo metodo integrato ExportDataTable(), che converte automaticamente i dati del foglio di lavoro in una DataTable strutturata preservando le intestazioni delle colonne e i tipi di dati.
Passaggio 1. Importa lo Spazio dei Nomi Necessario
Includi lo spazio dei nomi Spire.XLS per accedere alle classi essenziali.
- C#
using Spire.Xls;
Passaggio 2. Crea un Modulo e un Evento Click del Pulsante
Crea un modulo (ad es. Form1) e aggiungi un pulsante con un gestore di eventi per la lettura del file Excel.
- C#
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// Il codice andrà qui
}
}
Passaggio 3. Carica la Cartella di Lavoro
All'interno dell'evento click del pulsante, crea un oggetto Workbook e carica il file Excel.
- C#
Workbook wb = new Workbook();
wb.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
Passaggio 4. Esporta i Dati in DataTable
Accedi a un foglio di lavoro specifico tramite il suo indice ed esporta i suoi dati in una DataTable utilizzando il metodo ExportDataTable.
- C#
DataTable dataTable = wb.Worksheets[0].ExportDataTable();
Passaggio 5. Associa i Dati a DataGridView
Supponendo di avere un controllo DataGridView sul modulo, associa la DataTable al DataGridView per visualizzare i dati.
- C#
dataGridView1.DataSource = dataTable;
Di seguito è riportato il codice completo per leggere i dati da un file Excel in una DataTable e visualizzarli in un controllo DataGridView di Windows Forms:
- C#
using Spire.Xls;
using System.Data;
namespace ReadExcelIntoDataTable
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// Crea un oggetto Workbook
Workbook wb = new Workbook();
// Carica un file Excel esistente
wb.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
// Ottieni il primo foglio di lavoro
Worksheet sheet = wb.Worksheets[0];
// Esporta i dati dal foglio di lavoro in una DataTable
DataTable dataTable = sheet.ExportDataTable();
// Associa la DataTable a DataGridView
dataGridView1.DataSource = dataTable;
// Rilascia le risorse
wb.Dispose();
}
}
}
Risultato:

Leggi i Dati di Excel in un Database
L'integrazione dei dati di Excel con un database può semplificare la gestione dei dati. Di seguito, illustreremo il processo di lettura di un file Excel e di importazione del suo contenuto in un database MySQL. Questo metodo è ideale per automatizzare la migrazione dei dati, la creazione di report o la sincronizzazione dei dati di Excel con un database strutturato.
Passaggio 1. Installa la Libreria Dati MySQL
Per interagire con i database MySQL nelle tue applicazioni .NET, dovrai installare la libreria MySql.Data. Questo pacchetto NuGet fornisce le classi e i metodi necessari per connettersi e manipolare i database MySQL.
- C#
Install-Package MySql.Data
Passaggio 2. Importa gli Spazi dei Nomi Necessari
Prima di lavorare con file Excel e MySQL, è necessario includere gli spazi dei nomi richiesti. Spire.XLS viene utilizzato per le operazioni su Excel, mentre MySql.Data.MySqlClient abilita la connettività al database MySQL.
- C#
using Spire.Xls;
using MySql.Data.MySqlClient;
Passaggio 3. Estrai Intestazioni e Dati da Excel
Il seguente frammento di codice dimostra come estrarre intestazioni e dati dal file Excel. Le intestazioni vengono pulite per evitare conflitti di denominazione delle colonne MySQL, mentre i dati vengono archiviati in un formato strutturato per un inserimento successivo.
- C#
// Crea un oggetto Workbook
Workbook wb = new Workbook();
// Carica un documento Excel
wb.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
// Ottieni un foglio specifico
Worksheet sheet = wb.Worksheets[0];
// Recupera intestazioni
List<string> headers = new List<string>();
for (int col = 1; col <= sheet.LastColumn; col++)
{
string header = sheet.Range[1, col].Value?.ToString();
// Rimozione degli spazi per evitare conflitti con i nomi delle colonne MySQL
string cleanHeader = header?.Replace(" ", "");
headers.Add($"`{cleanHeader}`");
}
// Recupera dati
List<List<string>> data = new List<List<string>>();
for (int row = 2; row <= sheet.LastRow; row++) {
List<string> record = new List<string>();
for (int col = 1; col <= sheet.LastColumn; col++)
{
record.Add(sheet.Range[row, col].Value?.ToString() ?? string.Empty);
}
data.Add(record);
}
Passaggio 4. Connettiti a un Database MySQL
Viene stabilita una connessione al database MySQL utilizzando una stringa di connessione, che include i dettagli del server, le credenziali e il nome del database di destinazione. L'istruzione using garantisce il corretto smaltimento delle risorse.
- C#
string connectionString = "server=localhost;user=root;password=yourpassword;database=yourdatabase;";
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open();
// La connessione è stabilita; eseguire qui le operazioni sul database
}
Passaggio 5. Crea Dinamicamente una Tabella in MySQL
Questo passaggio genera dinamicamente una tabella MySQL con colonne corrispondenti alle intestazioni di Excel. Per semplicità, tutte le colonne sono impostate come VARCHAR(255), ma i tipi di dati possono essere regolati in base ai requisiti.
- C#
// Crea una tabella con colonne dinamiche basate sulle intestazioni
List<string> columns = new List<string>();
foreach (string header in headers)
{
// Supponendo che tutti i valori di intestazione siano VARCHAR per semplicità; regolare i tipi secondo necessità
columns.Add($"{header} VARCHAR(255)");
}
// Crea una tabella nel database
string columnsSql = string.Join(", ", columns);
string createTableQuery = $ @"
CREATE TABLE IF NOT EXISTS my_table (
id INT AUTO_INCREMENT PRIMARY KEY,
{columnsSql}
)";
// Esegui la query di creazione della tabella
using (MySqlCommand createCommand = new MySqlCommand(createTableQuery, connection))
{
createCommand.ExecuteNonQuery();
}
Passaggio 6. Popola la Tabella con i Dati
I dati Excel estratti vengono inseriti nella tabella MySQL utilizzando query con parametri per prevenire l'iniezione di SQL. Ogni riga del file Excel viene mappata a un record di database corrispondente.
- C#
// Prepara l'istruzione SQL INSERT
string placeholders = string.Join(", ", new string[headers.Count].Select(h => "?"));
string insertQuery = $"INSERT INTO my_table ({string.Join(", ", headers.Select(h => h.Trim('`')))}) VALUES ({placeholders})";
// Inserisci i dati nella tabella
foreach (List<string> record in data)
{
using (MySqlCommand insertCommand = new MySqlCommand(insertQuery, connection))
{
for (int i = 0; i < record.Count; i++)
{
insertCommand.Parameters.AddWithValue($" @2024\本地文件打包__20180302\Spire.Web\trunk\src\website\components\com_virtuemart\themes\default\templates\browse\includes\browse_searchparameter_form.tpl.php{i}", record[i]);
}
insertCommand.ExecuteNonQuery();
}
}
Ecco il codice completo per importare i dati da un file Excel in una tabella MySQL:
- C#
using Spire.Xls;
using MySql.Data.MySqlClient;
namespace ExcelToMySQL
{
class Program
{
static void Main(string[] args)
{
// Crea un oggetto Workbook
Workbook wb = new Workbook();
// Carica un documento Excel
wb.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
// Ottieni un foglio specifico
Worksheet sheet = wb.Worksheets[0];
// Recupera intestazioni
List<string> headers = new List<string>();
for (int col = 1; col <= sheet.LastColumn; col++)
{
string header = sheet.Range[1, col].Value?.ToString();
// Rimozione degli spazi per evitare conflitti con i nomi delle colonne MySQL
string cleanHeader = header?.Replace(" ", "");
headers.Add($"`{cleanHeader}`");
}
// Recupera dati
List<List<string>> data = new List<List<string>>();
for (int row = 2; row <= sheet.LastRow; row++)
{
List<string> record = new List<string>();
for (int col = 1; col <= sheet.LastColumn; col++)
{
record.Add(sheet.Range[row, col].Value?.ToString() ?? string.Empty);
}
data.Add(record);
}
// Stabilisci una connessione al database MySQL
string connectionString = "server=localhost;user=root;password=admin;database=excel_db;";
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open();
// Crea una tabella con colonne dinamiche basate sulle intestazioni
List<string> columns = new List<string>();
foreach (string header in headers)
{
// Supponendo che tutti i valori di intestazione siano VARCHAR per semplicità; regolare i tipi secondo necessità
columns.Add($"{header} VARCHAR(255)");
}
// Crea una tabella nel database
string columnsSql = string.Join(", ", columns);
string createTableQuery = $ @"
CREATE TABLE IF NOT EXISTS my_table (
id INT AUTO_INCREMENT PRIMARY KEY,
{columnsSql}
)";
// Esegui la query di creazione della tabella
using (MySqlCommand createCommand = new MySqlCommand(createTableQuery, connection))
{
createCommand.ExecuteNonQuery();
}
// Prepara l'istruzione SQL INSERT
string placeholders = string.Join(", ", new string[headers.Count].Select(h => "?"));
string insertQuery = $"INSERT INTO my_table ({string.Join(", ", headers.Select(h => h.Trim('`')))}) VALUES ({placeholders})";
// Inserisci i dati nella tabella
foreach (List<string> record in data)
{
using (MySqlCommand insertCommand = new MySqlCommand(insertQuery, connection))
{
for (int i = 0; i < record.Count; i++)
{
insertCommand.Parameters.AddWithValue($" @2024\本地文件打包__20180302\Spire.Web\trunk\src\website\components\com_virtuemart\themes\default\templates\browse\includes\browse_searchparameter_form.tpl.php{i}", record[i]);
}
insertCommand.ExecuteNonQuery();
}
}
}
Console.WriteLine("Dati esportati con successo!");
}
}
}
Risultato:

Conclusione
Leggere file Excel in C# non è mai stato così facile, grazie a librerie come Spire.XLS. Questa guida ti ha illustrato il processo di caricamento dei file Excel, la lettura del loro contenuto e persino l'importazione dei dati in un database MySQL. Con queste tecniche, puoi migliorare notevolmente le capacità di gestione dei dati delle tue applicazioni.
Domande Frequenti
D1: Posso leggere file Excel protetti da password?
R: Sì, Spire.XLS supporta la lettura di file Excel crittografati utilizzando:
- C#
wb.OpenPassword = "psd";
wb.LoadFromFile("file.xlsx");
D2: Come posso leggere i risultati delle formule invece della formula stessa?
R: Hai due opzioni per recuperare i risultati delle formule:
Per singole celle:
Verifica se una cella contiene una formula usando CellRange.HasFormula e ottieni il valore con CellRange.FormulaValue:
- C#
CellRange cell = sheet.Range[1, 1];
if (cell.HasFormula)
{
string result = cell.FormulaValue.ToString();
}
Per l'esportazione di massa in DataTable:
Usa Worksheet.ExportDataTable() con computedFormulaValue: true per esportare i valori calcolati:
- C#
DataTable data = sheet.ExportDataTable(range, exportColumnNames: true, computedFormulaValue: true);
D3: Come posso leggere i dati di Excel in una DataTable?
R: Usa il metodo Worksheet.ExportDataTable() fornito da Spire.XLS.
D4: Come posso leggere un file Excel riga per riga?
R: Fare riferimento al seguente codice:
- C#
Workbook workbook = new Workbook();
workbook.LoadFromFile("input.xlsx");
Worksheet sheet = workbook.Worksheets[0];
for (int row = 1; row <= sheet.LastRow; row++)
{
for (int col = 1; col <= sheet.LastColumn; col++)
{
string cellValue = sheet.Range[row, col].Value?.ToString() ?? string.Empty;
Console.WriteLine(cellValue);
}
}
Ottieni una Licenza Gratuita
Per sperimentare appieno le funzionalità di Spire.XLS per .NET senza alcuna limitazione di valutazione, puoi richiedere una licenza di prova gratuita di 30 giorni.