← Назад к вопросам

Какие знаешь библиотеки для работы с Excel?

2.0 Middle🔥 181 комментариев
#ASP.NET и Web API

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Библиотеки для работы с Excel в C#

Для работы с Excel в C# существует несколько популярных библиотек, которые я активно использую в проектах. Они делятся на категории по назначению: чтение/запись, манипуляция данными, генерация отчетов и интеграция с Office Interop.

Основные библиотеки

1. EPPlus (рекомендуемая для .NET Core/5+)

Это наиболее популярная библиотека для современных .NET проектов. Она работает без зависимостей от Microsoft Office и использует формат Open XML.

Преимущества EPPlus:

  • Полная поддержка форматов .xlsx и .xlsm
  • Высокая производительность для больших файлов
  • Поддержка стилей, формул, диаграмм, защищенных листов
  • Совместимость с .NET Framework 4.5+ и .NET Core/5+

Пример использования:

using OfficeOpenXml;

public void CreateExcelFile()
{
    using (var package = new ExcelPackage())
    {
        // Добавляем рабочий лист
        var worksheet = package.Workbook.Worksheets.Add("Sheet1");
        
        // Заполняем данные
        worksheet.Cells["A1"].Value = "ID";
        worksheet.Cells["B1"].Value = "Name";
        worksheet.Cells["A2"].Value = 1;
        worksheet.Cells["B2"].Value = "Product A";
        
        // Применяем стиль
        worksheet.Cells["A1:B1"].Style.Font.Bold = true;
        
        // Сохраняем файл
        package.SaveAs(new FileInfo("report.xlsx"));
    }
}

2. NPOI (для кроссплатформенных проектов)

Эта библиотека портирована из Java POI и поддерживает форматы .xls (бинарный) и .xlsx.

Ключевые особенности NPOI:

  • Поддержка старого формата .xls без зависимости от Office
  • Кроссплатформенность (работает под Linux/Mac)
  • Возможность чтения/записи с высокой точностью сохранения формата
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;

public void ReadExcelWithNPOI()
{
    // Для .xls файлов
    var fileStream = new FileStream("data.xls", FileMode.Open);
    var hssfWorkbook = new HSSFWorkbook(fileStream);
    
    // Для .xlsx файлов
    var xssfWorkbook = new XSSFWorkbook(fileStream);
    
    var sheet = hssfWorkbook.GetSheetAt(0);
    var cell = sheet.GetRow(0).GetCell(0);
    Console.WriteLine(cell.StringCellValue);
}

3. Microsoft.Office.Interop.Excel (для интеграции с Office)

Эта библиотека предоставляет COM интерфейсы для непосредственной работы с установленным Excel.

Применение Interop:

  • Когда требуется полная функциональность Excel (макросы, сложные формулы)
  • Для автоматизации процессов с открытым Excel
  • В проектах, где уже установлен Microsoft Office
using Microsoft.Office.Interop.Excel;

public void InteropExample()
{
    var excelApp = new Application();
    var workbook = excelApp.Workbooks.Add();
    var worksheet = workbook.ActiveSheet;
    
    worksheet.Cells[1, 1] = "Header";
    worksheet.Cells[2, 1] = "Data";
    
    workbook.SaveAs(@"C:\report.xlsx");
    workbook.Close();
    excelApp.Quit();
}

Важно: Interop требует установленного Excel и может вызывать проблемы с памятью (объекты не всегда освобождаются).

4. ClosedXML (удобный API поверх Open XML)

Эта библиотека построена на основе Open XML SDK, но предоставляет более простой и интуитивный API.

Отличия ClosedXML:

  • Упрощенный синтаксис для манипуляции данными
  • Поддержка LINQ для обработки диапазонов
  • Автоматическое управление стилями и форматами
using ClosedXML.Excel;

public void ClosedXMLExample()
{
    var workbook = new XLWorkbook();
    var worksheet = workbook.Worksheets.Add("Sample");
    
    worksheet.Cell("A1").Value = "Total";
    worksheet.Cell("A2").Value = 100;
    worksheet.Cell("A3").Value = 200;
    
    // Использование LINQ
    var sum = worksheet.Range("A2:A3").Cells()
                       .Sum(c => c.GetValue<int>());
    worksheet.Cell("A4").Value = sum;
    
    workbook.SaveAs("result.xlsx");
}

Сравнение и выбор библиотеки

Для выбора библиотеки учитывайте следующие критерии:

EPPlus выбирают когда:

  • Проект на .NET Core/5+
  • Требуется высокая производительность
  • Нужна поддержка современных форматов Excel
  • Не требуется работа с .xls

NPOI применяют когда:

  • Проект должен быть кроссплатформенным
  • Нужна поддержка старого формата .xls
  • Требуется совместимость с Java системами

ClosedXML используют когда:

  • Важен удобный и читаемый код
  • Требуется работа с сложными структурами данных
  • Проект уже использует Open XML SDK

Interop Excel необходим когда:

  • Имеется установленный Excel на машине
  • Требуется полная функциональность (макросы, VBA)
  • Проект работает в корпоративной среде с Office

Дополнительные библиотеки для специализированных задач

  • SpreadsheetLight – легковесная альтернатива для простых операций
  • ExcelDataReader – специализированная библиотека только для чтения Excel файлов с высокой скоростью
  • Open XML SDK – низкоуровневая библиотека от Microsoft для прямого манипулирования XML структурами Excel

В моей практике EPPlus является наиболее универсальным выбором для большинства backend проектов на C#, поскольку она сочетает производительность, современный API и отсутствие зависимостей от Office. Однако для специфических задач (например, обработка legacy .xls файлов в Linux) NPOI оказывается незаменимой. Всегда оценивайте требования проекта: формат файлов, необходимость кроссплатформенности, сложность операций и производительность перед выбором библиотеки.