Avatar ·

Как создать файл Excel (.XLS и .XLSX) на C# без установленного Microsoft Office?

Всем привет! Я новичок в C# и столкнулся с задачей: нужно программно создавать Excel-файлы (как старый формат .xls, так и новый .xlsx) в своем приложении. Проблема в том, что на сервере, где будет развернуто приложение, Microsoft Office не установлен, и ставить его нельзя. Я пытался использовать библиотеки Microsoft.Office.Interop.Excel, но они требуют установленного Office и выдают ошибку, если его нет. Мой текущий код выглядит так: ```csharp using Microsoft.Office.Interop.Excel; public void CreateExcelFile(string filePath) { Application excelApp = new Application(); Workbook workbook = excelApp.Workbooks.Add(); Worksheet worksheet = (Worksheet)workbook.Sheets[1]; worksheet.Cells[1, 1] = "Привет, мир!"; workbook.SaveAs(filePath); workbook.Close(); excelApp.Quit(); } ``` Но это не работает на сервере без Office. Подскажите, какие есть альтернативные библиотеки или подходы для создания Excel-файлов на C#, которые не требуют установки Office? Нужно, чтобы решение было бесплатным, надежным и поддерживало оба формата (.xls и .xlsx). Заранее спасибо! <<>>

Использование библиотеки EPPlus для создания .xlsx файлов

Лучший способ решить вашу проблему — использовать специализированные библиотеки для работы с Excel, которые не требуют установки Office. Наиболее популярные и надежные из них — EPPlus (для .xlsx) и ClosedXML (также для .xlsx). Если вам нужна поддержка старого формата .xls, рекомендую NPOI — она поддерживает оба формата.

Рассмотрим EPPlus как самый популярный вариант для современных .xlsx файлов. Эта библиотека полностью бесплатна (с версии 5.0 для некоммерческого использования) и не требует установки Office. Вот пример создания простого Excel-файла:

using OfficeOpenXml;
using System.IO;

public void CreateExcelFileWithEPPlus(string filePath)
{
    // Устанавливаем лицензию (обязательно для EPPlus 5+)
    ExcelPackage.LicenseContext = LicenseContext.NonCommercial;

    using (var package = new ExcelPackage())
    {
        // Создаем лист
        var worksheet = package.Workbook.Worksheets.Add("Лист1");

        // Заполняем ячейки
        worksheet.Cells[1, 1].Value = "Привет, мир!";
        worksheet.Cells[1, 2].Value = 123;
        worksheet.Cells[2, 1].Value = "Дата";
        worksheet.Cells[2, 2].Value = DateTime.Now;

        // Настройка стилей
        worksheet.Cells[1, 1].Style.Font.Bold = true;
        worksheet.Cells[1, 1].Style.Font.Color.SetColor(System.Drawing.Color.Red);

        // Сохраняем файл
        FileInfo fileInfo = new FileInfo(filePath);
        package.SaveAs(fileInfo);
    }
}

Установка EPPlus через NuGet:

Install-Package EPPlus

Поддержка старого формата .xls с помощью NPOI

Если вам обязательно нужно поддерживать формат .xls (Excel 97-2003), используйте библиотеку NPOI. Она поддерживает оба формата и также не требует Office. Пример для .xls:

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System.IO;

public void CreateXlsFileWithNPOI(string filePath)
{
    IWorkbook workbook = new HSSFWorkbook();
    ISheet sheet = workbook.CreateSheet("Лист1");

    // Создаем строку и ячейки
    IRow row = sheet.CreateRow(0);
    row.CreateCell(0).SetCellValue("Привет, мир!");
    row.CreateCell(1).SetCellValue(123);

    // Сохраняем
    using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
    {
        workbook.Write(fs);
    }
}

Для .xlsx в NPOI используйте XSSFWorkbook вместо HSSFWorkbook.

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

  • EPPlus — лучший выбор для .xlsx. Мощный API, поддержка стилей, формул, диаграмм. Бесплатно для некоммерческого использования.
  • ClosedXML — похож на EPPlus, но проще в использовании. Только .xlsx.
  • NPOI — единственная популярная библиотека, поддерживающая .xls. Идеально, если нужна обратная совместимость.
  • DocumentFormat.OpenXml — официальная библиотека Microsoft для OpenXML, но сложнее в использовании (работа напрямую с XML).

Рекомендация

Для большинства современных проектов используйте EPPlus — это самый удобный и функциональный вариант. Если требуется поддержка .xls, добавьте NPOI. Обе библиотеки активно поддерживаются и имеют хорошую документацию.

<<>>

Альтернативный подход: использование OpenXML SDK

Если вам не подходят сторонние библиотеки по лицензионным причинам, можно использовать официальный Open XML SDK от Microsoft. Он работает напрямую с форматом OpenXML (на котором основаны .xlsx файлы) и не требует установки Office. Однако API более низкоуровневый и требует больше кода.

Пример создания простого .xlsx файла с OpenXML SDK:

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;

public void CreateXlsxWithOpenXml(string filePath)
{
    using (SpreadsheetDocument document = SpreadsheetDocument.Create(filePath, SpreadsheetDocumentType.Workbook))
    {
        WorkbookPart workbookPart = document.AddWorkbookPart();
        workbookPart.Workbook = new Workbook();

        WorksheetPart worksheetPart = workbookPart.AddNewPart();
        worksheetPart.Worksheet = new Worksheet(new SheetData());

        Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());
        Sheet sheet = new Sheet()
        {
            Id = workbookPart.GetIdOfPart(worksheetPart),
            SheetId = 1,
            Name = "Лист1"
        };
        sheets.Append(sheet);

        // Добавляем данные
        SheetData sheetData = worksheetPart.Worksheet.GetFirstChild();
        Row row = new Row() { RowIndex = 1 };
        Cell cell = new Cell() 
        { 
            CellReference = "A1", 
            DataType = CellValues.String, 
            CellValue = new CellValue("Привет, мир!") 
        };
        row.Append(cell);
        sheetData.Append(row);

        workbookPart.Workbook.Save();
    }
}

Плюсы: официальная библиотека, бесплатно, хорошая производительность. Минусы: много кода для простых операций, сложно работать со стилями. Подходит, если вам нужен полный контроль над структурой файла или если лицензия запрещает использование EPPlus/NPOI.