Содержание
Установить через Nuget
Install-Package Spire.XLS
Похожие ссылки
Чтение файлов Excel на C# — это обычное требование для многих приложений, будь то для анализа данных, создания отчетов или интеграции с базами данных. Хотя можно использовать библиотеки Microsoft Interop, у них есть ограничения (например, требование установленного Excel). Вместо этого мы рассмотрим более эффективный подход с использованием Spire.XLS, библиотеки .NET, которая позволяет читать и записывать файлы Excel без Interop. В этой статье рассматриваются:
- Библиотека C# .NET для чтения Excel без Interop
- Как прочитать файл Excel на C#
- Чтение данных Excel в DataTable
- Чтение данных Excel в базу данных
- Заключение
- Часто задаваемые вопросы
Библиотека C# .NET для чтения Excel без Interop
Excel Interop от Microsoft требует, чтобы Excel был установлен на компьютере, что делает его непригодным для серверных приложений. Вместо этого библиотеки, такие как Spire.XLS, предлагают легкое, высокопроизводительное решение без зависимостей от Excel.
Зачем использовать Spire.XLS?
- Не требуется установка Excel – работает независимо.
- Поддерживает .NET Core и .NET Framework – кроссплатформенная совместимость.
- Чтение/запись файлов Excel – поддерживает .xls, .xlsx и .xlsm.
- Импорт в DataTable и базы данных – бесшовная интеграция с ADO.NET.
Установка Spire.XLS
Для начала установите библиотеку через менеджер пакетов NuGet:
Install-Package Spire.XLS
Кроме того, вы можете скачать Spire.XLS для .NET с нашего официального сайта и вручную сослаться на DLL-файл.
Как прочитать файл Excel на C#
В этом разделе показано, как прочитать файл Excel на C# с помощью библиотеки Spire.XLS. Процесс включает загрузку файла, доступ к рабочим листам и программное получение значений ячеек. Это полезно для автоматизации извлечения данных, обработки отчетов Excel или интеграции данных электронных таблиц в приложения.
Шаг 1. Импортируйте необходимое пространство имен
Чтобы использовать функциональность Spire.XLS, вам необходимо импортировать его пространство имен. Это дает доступ к таким классам, как Workbook и Worksheet, которые необходимы для операций с файлами Excel.
- C#
using Spire.Xls;
Шаг 2. Загрузите файл Excel
Чтобы загрузить файл Excel, создайте объект Workbook и вызовите метод LoadFromFile. Это считывает файл в память, позволяя дальнейшие манипуляции.
- C#
Workbook wb = new Workbook();
wb.LoadFromFile("input.xlsx");
Шаг 3. Получите определенный рабочий лист
Файлы Excel могут содержать несколько рабочих листов. Вы можете получить доступ к определенному листу, индексируя коллекцию Worksheets (начиная с нуля). Первый лист находится по индексу 0, второй — по индексу 1 и так далее.
- C#
Worksheet sheet = wb.Worksheets[0]; //Первый лист
Шаг 4. Получение значения определенной ячейки
Чтобы получить значение ячейки, используйте свойство CellRange.Value. Укажите индексы строки и столбца (начиная с 1), чтобы найти ячейку. Это полезно для извлечения структурированных данных, таких как заголовки или отдельные записи.
- C#
CellRange cell = sheet.Range[1, 1]; // Строка1, Столбец 1 (A1)
string value = cell.Value;
Ниже приведен полный пример чтения данных со всего рабочего листа и вывода их в консоль:
- C#
using Spire.Xls;
namespace ReadExcelData
{
class Program
{
static void Main(string[] args)
{
// Create a Workbook object
Workbook wb = new Workbook();
// Load an existing Excel file
wb.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
// Get the first worksheet
Worksheet sheet = wb.Worksheets[0];
// Get the cell range containing data
CellRange locatedRange = sheet.AllocatedRange;
// Iterate through the rows
for (int i = 0; i < locatedRange.Rows.Length; i++)
{
// Iterate through the columns
for (int j = 0; j < locatedRange.Rows[i].ColumnCount; j++)
{
// Get data of a specific cell
string cellValue = locatedRange[i + 1, j + 1].Value?.ToString() ?? "N/A";
// Align output with a width of 22
Console.Write($"{cellValue,-22}");
}
Console.WriteLine();
}
}
}
}
Результат:

Чтение данных Excel в DataTable
Экспорт данных Excel в DataTable обеспечивает бесшовную интеграцию с элементами управления пользовательского интерфейса, такими как DataGridView, или обработку данных на стороне сервера. Spire.XLS упрощает этот процесс с помощью встроенного метода ExportDataTable(), который автоматически преобразует данные рабочего листа в структурированный DataTable, сохраняя заголовки столбцов и типы данных.
Шаг 1. Импортируйте необходимое пространство имен
Включите пространство имен Spire.XLS для доступа к основным классам.
- C#
using Spire.Xls;
Шаг 2. Создайте форму и событие нажатия кнопки
Создайте форму (например, Form1) и добавьте кнопку с обработчиком событий для чтения файла Excel.
- C#
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// Код будет здесь
}
}
Шаг 3. Загрузите рабочую книгу
В обработчике события нажатия кнопки создайте объект Workbook и загрузите файл Excel.
- C#
Workbook wb = new Workbook();
wb.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
Шаг 4. Экспорт данных в DataTable
Получите доступ к определенному рабочему листу по его индексу и экспортируйте его данные в DataTable с помощью метода ExportDataTable.
- C#
DataTable dataTable = wb.Worksheets[0].ExportDataTable();
Шаг 5. Привязка данных к DataGridView
Предполагая, что у вас есть элемент управления DataGridView на вашей форме, привяжите DataTable к DataGridView для отображения данных.
- C#
dataGridView1.DataSource = dataTable;
Ниже приведен полный код для чтения данных из файла Excel в DataTable и отображения их в элементе управления DataGridView в 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)
{
// Create a Workbook object
Workbook wb = new Workbook();
// Load an existing Excel file
wb.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
// Get the first worksheet
Worksheet sheet = wb.Worksheets[0];
// Export data from worksheet into a DataTable
DataTable dataTable = sheet.ExportDataTable();
// Bind DataTable to DataGridView
dataGridView1.DataSource = dataTable;
// Dispose resources
wb.Dispose();
}
}
}
Результат:

Чтение данных Excel в базу данных
Интеграция данных Excel с базой данных может упростить управление данными. Ниже мы рассмотрим процесс чтения файла Excel и импорта его содержимого в базу данных MySQL. Этот метод идеально подходит для автоматизации миграции данных, создания отчетов или синхронизации данных Excel со структурированной базой данных.
Шаг 1. Установите библиотеку данных MySQL
Для взаимодействия с базами данных MySQL в ваших .NET-приложениях вам необходимо установить библиотеку MySql.Data. Этот пакет NuGet предоставляет необходимые классы и методы для подключения к базам данных MySQL и управления ими.
- C#
Install-Package MySql.Data
Шаг 2. Импортируйте необходимые пространства имен
Перед работой с файлами Excel и MySQL необходимо включить требуемые пространства имен. Spire.XLS используется для операций с Excel, а MySql.Data.MySqlClient обеспечивает подключение к базе данных MySQL.
- C#
using Spire.Xls;
using MySql.Data.MySqlClient;
Шаг 3. Извлечение заголовков и данных из Excel
Следующий фрагмент кода демонстрирует, как извлечь заголовки и данные из файла Excel. Заголовки очищаются, чтобы избежать конфликтов имен столбцов MySQL, а данные сохраняются в структурированном формате для последующей вставки.
- C#
// Create a Workbook object
Workbook wb = new Workbook();
// Load an Excel document
wb.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
// Get a specific sheet
Worksheet sheet = wb.Worksheets[0];
// Retrieve headers
List<string> headers = new List<string>();
for (int col = 1; col <= sheet.LastColumn; col++)
{
string header = sheet.Range[1, col].Value?.ToString();
// Removing spaces to avoid conflicts with MySQL column names
string cleanHeader = header?.Replace(" ", "");
headers.Add($"`{cleanHeader}`");
}
// Retrieve data
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);
}
Шаг 4. Подключение к базе данных MySQL
Соединение с базой данных MySQL устанавливается с помощью строки подключения, которая включает сведения о сервере, учетные данные и имя целевой базы данных. Оператор using обеспечивает надлежащее освобождение ресурсов.
- C#
string connectionString = "server=localhost;user=root;password=yourpassword;database=yourdatabase;";
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open();
// Connection is established; perform database operations here
}
Шаг 5. Динамическое создание таблицы в MySQL
На этом шаге динамически создается таблица MySQL со столбцами, соответствующими заголовкам Excel. для простоты все столбцы установлены как VARCHAR(255), но типы данных можно настроить в соответствии с требованиями.
- C#
// Create a table with dynamic columns based on headers
List<string> columns = new List<string>();
foreach (string header in headers)
{
// Assuming all header values are VARCHAR for simplicity; adjust types as needed
columns.Add($"{header} VARCHAR(255)");
}
// Create a table in database
string columnsSql = string.Join(", ", columns);
string createTableQuery = $ @"
CREATE TABLE IF NOT EXISTS my_table (
id INT AUTO_INCREMENT PRIMARY KEY,
{columnsSql}
)";
// Execute the create table query
using (MySqlCommand createCommand = new MySqlCommand(createTableQuery, connection))
{
createCommand.ExecuteNonQuery();
}
Шаг 6. Заполнение таблицы данными
Извлеченные данные Excel вставляются в таблицу MySQL с использованием параметризованных запросов для предотвращения SQL-инъекций. Каждая строка из файла Excel сопоставляется с соответствующей записью в базе данных.
- C#
// Prepare the SQL INSERT statement
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})";
// Insert data into the table
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();
}
}
Вот полный код для импорта данных из файла Excel в таблицу MySQL:
- C#
using Spire.Xls;
using MySql.Data.MySqlClient;
namespace ExcelToMySQL
{
class Program
{
static void Main(string[] args)
{
// Create a Workbook object
Workbook wb = new Workbook();
// Load an Excel document
wb.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
// Get a specific sheet
Worksheet sheet = wb.Worksheets[0];
// Retrieve headers
List<string> headers = new List<string>();
for (int col = 1; col <= sheet.LastColumn; col++)
{
string header = sheet.Range[1, col].Value?.ToString();
// Removing spaces to avoid conflicts with MySQL column names
string cleanHeader = header?.Replace(" ", "");
headers.Add($"`{cleanHeader}`");
}
// Retrieve data
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);
}
// Establish a connection to the MySQL database
string connectionString = "server=localhost;user=root;password=admin;database=excel_db;";
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open();
// Create a table with dynamic columns based on headers
List<string> columns = new List<string>();
foreach (string header in headers)
{
// Assuming all header values are VARCHAR for simplicity; adjust types as needed
columns.Add($"{header} VARCHAR(255)");
}
// Create a table in database
string columnsSql = string.Join(", ", columns);
string createTableQuery = $ @"
CREATE TABLE IF NOT EXISTS my_table (
id INT AUTO_INCREMENT PRIMARY KEY,
{columnsSql}
)";
// Execute the create table query
using (MySqlCommand createCommand = new MySqlCommand(createTableQuery, connection))
{
createCommand.ExecuteNonQuery();
}
// Prepare the SQL INSERT statement
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})";
// Insert data into the table
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("Данные успешно экспортированы!");
}
}
}
Результат:

Заключение
Чтение файлов Excel на C# никогда не было таким простым благодаря таким библиотекам, как Spire.XLS. В этом руководстве вы ознакомились с процессом загрузки файлов Excel, чтения их содержимого и даже импорта данных в базу данных MySQL. С помощью этих методов вы можете значительно расширить возможности обработки данных в своих приложениях.
Часто задаваемые вопросы
В1: Могу ли я читать защищенные паролем файлы Excel?
О: Да, Spire.XLS поддерживает чтение зашифрованных файлов Excel с помощью:
- C#
wb.OpenPassword = "psd";
wb.LoadFromFile("file.xlsx");
В2: Как мне прочитать результаты формулы вместо самой формулы?
О: У вас есть два варианта получения результатов формулы:
Для отдельных ячеек:
Проверьте, содержит ли ячейка формулу, с помощью CellRange.HasFormula, и получите значение с помощью CellRange.FormulaValue:
- C#
CellRange cell = sheet.Range[1, 1];
if (cell.HasFormula)
{
string result = cell.FormulaValue.ToString();
}
Для массового экспорта в DataTable:
Используйте Worksheet.ExportDataTable() с computedFormulaValue: true для экспорта вычисленных значений:
- C#
DataTable data = sheet.ExportDataTable(range, exportColumnNames: true, computedFormulaValue: true);
В3: Как я могу прочитать данные Excel в DataTable?
О: Используйте метод Worksheet.ExportDataTable(), предоставляемый Spire.XLS.
В4: Как я могу прочитать файл Excel построчно?
О: Обратитесь к следующему коду:
- 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);
}
}
Получить бесплатную лицензию
Чтобы в полной мере ощутить возможности Spire.XLS для .NET без каких-либо оценочных ограничений, вы можете запросить бесплатную 30-дневную пробную лицензию.