Как создать Excel файл (.xls/.xlsx) в C# без установленного Microsoft Office?
Лучшее решение: библиотека EPPlus (для .xlsx)
Рекомендую использовать EPPlus — это мощная и бесплатная библиотека для создания и чтения Excel файлов нового формата (.xlsx) без установки Microsoft Office. Она работает через Open XML и не требует COM-объектов.
Установка
Установите через NuGet Package Manager:
Install-Package EPPlus
Или через .NET CLI:
dotnet add package EPPlus
Пример создания простого Excel файла
Вот как переписать ваш пример с использованием EPPlus:
using OfficeOpenXml;
using System.IO;
class Program
{
static void Main()
{
// Устанавливаем лицензию (бесплатная для некоммерческого использования)
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
using (var package = new ExcelPackage())
{
// Добавляем лист
var worksheet = package.Workbook.Worksheets.Add("Лист1");
// Записываем данные
worksheet.Cells[1, 1].Value = "Привет, мир!";
// Сохраняем файл
FileInfo file = new FileInfo(@"C:\test.xlsx");
package.SaveAs(file);
}
}
}
Расширенный пример: форматирование и несколько листов
Покажу, как добавить форматирование, цвета, границы и несколько листов:
using OfficeOpenXml;
using OfficeOpenXml.Style;
using System.Drawing;
class Program
{
static void Main()
{
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
using (var package = new ExcelPackage())
{
// Лист 1: данные с форматированием
var sheet1 = package.Workbook.Worksheets.Add("Отчет");
// Заголовок
sheet1.Cells[1, 1].Value = "Имя";
sheet1.Cells[1, 2].Value = "Возраст";
sheet1.Cells[1, 3].Value = "Город";
// Стилизация заголовка
using (var range = sheet1.Cells[1, 1, 1, 3])
{
range.Style.Font.Bold = true;
range.Style.Fill.PatternType = ExcelFillStyle.Solid;
range.Style.Fill.BackgroundColor.SetColor(Color.LightBlue);
range.Style.Border.BorderAround(ExcelBorderStyle.Thin);
}
// Данные
sheet1.Cells[2, 1].Value = "Анна";
sheet1.Cells[2, 2].Value = 25;
sheet1.Cells[2, 3].Value = "Москва";
sheet1.Cells[3, 1].Value = "Иван";
sheet1.Cells[3, 2].Value = 30;
sheet1.Cells[3, 3].Value = "СПб";
// Автоматическая ширина колонок
sheet1.Cells[1, 1, 3, 3].AutoFitColumns();
// Лист 2: второй отчет
var sheet2 = package.Workbook.Worksheets.Add("Аналитика");
sheet2.Cells[1, 1].Value = "Дата";
sheet2.Cells[1, 2].Value = "Продажи";
sheet2.Cells[2, 1].Value = DateTime.Now.ToShortDateString();
sheet2.Cells[2, 2].Value = 15000;
sheet2.Cells[2, 2].Style.Numberformat.Format = "#,##0.00";
// Сохраняем
package.SaveAs(new FileInfo(@"C:\report.xlsx"));
}
}
}
Особенности и преимущества EPPlus
- Не требует Office — работает на чистом .NET
- Поддерживает .xlsx (формат Office Open XML)
- Форматирование: цвета, шрифты, границы, объединение ячеек
- Диаграммы, сводные таблицы, формулы
- Потоковая запись для больших файлов
- Лицензия: бесплатно для некоммерческого использования (с версии 5+ требуется указание лицензии)
Для старого формата .xls
Если вам нужен .xls, используйте библиотеку NPOI (она поддерживает оба формата). Установка:
Install-Package NPOI
Пример для .xls:
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
var workbook = new HSSFWorkbook();
var sheet = workbook.CreateSheet("Лист1");
var row = sheet.CreateRow(0);
row.CreateCell(0).SetCellValue("Привет");
using (var fs = new FileStream("test.xls", FileMode.Create))
workbook.Write(fs);
Заключение
Для современных проектов рекомендую EPPlus — это наиболее полная и удобная библиотека. Если нужна поддержка .xls или вы хотите избежать лицензионных ограничений EPPlus, используйте NPOI (лицензия Apache 2.0, полностью бесплатно).
<<Альтернативный подход: библиотека ClosedXML
Если вам нужна максимальная простота и вы работаете только с .xlsx форматом, обратите внимание на ClosedXML. Она построена над Open XML SDK, но предоставляет гораздо более удобный API, похожий на работу с Excel через интерфейс.
Установка
Install-Package ClosedXML
Пример кода
using ClosedXML.Excel;
var workbook = new XLWorkbook();
var ws = workbook.Worksheets.Add("Лист1");
ws.Cell(1, 1).Value = "Привет, мир!";
ws.Cell(1, 1).Style.Font.Bold = true;
ws.Cell(1, 1).Style.Fill.BackgroundColor = XLColor.LightBlue;
// Добавляем данные
ws.Cell(2, 1).Value = "Анна";
ws.Cell(2, 2).Value = 25;
// Сохраняем
workbook.SaveAs("test.xlsx");
Преимущества ClosedXML
- Очень простой и интуитивный API
- Поддержка стилей, формул, объединения ячеек
- Работает без Office
- Полностью бесплатный (лицензия MIT)
Недостатки
- Только .xlsx (не поддерживает .xls)
- Может быть медленнее EPPlus при работе с очень большими файлами (более 100 000 строк)
ClosedXML отлично подходит для небольших и средних проектов, где важна скорость разработки и читаемость кода.