Как создать файл Excel (.XLS и .XLSX) на C# без установленного Microsoft Office?
Использование библиотеки 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.
Ответов пока нет.
Войдите чтобы оставить ответ