
Сохранение файлов Excel в C# — это обычная задача во многих .NET-приложениях, особенно при создании отчетов, экспорте аналитических данных или автоматизации системных журналов. Независимо от того, работаете ли вы с финансовыми сводками или данными о ежедневных операциях, возможность программно создавать и сохранять файлы Excel может значительно повысить эффективность и точность.
В C# разработчики могут работать с файлами Excel несколькими способами: создавать новые книги, записывать данные и сохранять их в различных форматах, таких как XLSX, CSV или PDF. С помощью специализированных библиотек для Excel эти операции можно эффективно автоматизировать, не полагаясь на Microsoft Excel или ручное вмешательство.
В этой статье мы рассмотрим, как:
- Подготовить среду разработки
- Сохранять данные из DataTable или DataGridView в Excel
- Сохранять файлы Excel в различных форматах электронных таблиц (CSV, XLS и т. д.)
- Экспортировать файлы Excel в форматы документов (PDF, HTML и т. д.)
- Сохранять книги Excel в MemoryStream для веб-приложений
- Открывать и повторно сохранять существующие файлы Excel
Подготовьте среду разработки
Прежде чем углубляться в код, настройте свою среду разработки с помощью библиотеки Excel, которая поддерживает создание, чтение и сохранение файлов в .NET. В этом руководстве мы будем использовать Free Spire.XLS для .NET.
Шаг 1: Установите Spire.XLS через NuGet
Install-Package FreeSpire.XLS
Шаг 2: Импортируйте необходимое пространство имен
using Spire.Xls;
Шаг 3: Создайте, запишите и сохраните простой файл Excel
// Создать новую книгу и получить первый лист
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
// Записать "Hello World!" в ячейку A1
sheet.Range["A1"].Text = "Hello World!";
// Сохранить книгу в файл
workbook.SaveToFile("HelloWorld.xlsx", ExcelVersion.Version2016);
Этот простой пример показывает основной рабочий процесс: создание книги, запись данных в ячейку и сохранение файла.
После этого вы можете изучить ключевые классы и методы, такие как:
- Workbook – представляет весь файл Excel.
- Worksheet – представляет один лист в книге.
- Range – позволяет получать доступ к определенным ячейкам для ввода, форматирования или стилизации.
- Workbook.SaveToFile() – сохраняет книгу на диск в указанном формате Excel.
Сохранение данных в файл Excel на C#
Сохранение структурированных данных, таких как DataTable или DataGridView, в файл Excel — одна из самых практичных задач в разработке на C#. Независимо от того, создает ли ваше приложение результаты базы данных, содержимое сетки пользовательского интерфейса или автоматизированные отчеты, экспорт этих наборов данных в Excel обеспечивает лучшую читаемость и совместимость.
Пример 1: Сохранение DataTable в Excel
using Spire.Xls;
using System.Data;
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
sheet.Name = "EmployeeData";
DataTable table = new DataTable();
table.Columns.Add("EmployeeID");
table.Columns.Add("FullName");
table.Columns.Add("Department");
table.Columns.Add("HireDate");
table.Columns.Add("Salary");
// Add sample rows
table.Rows.Add("E001", "Alice Johnson", "Finance", "2020-03-12", "7500");
table.Rows.Add("E002", "Bob Williams", "Human Resources", "2019-08-05", "6800");
table.Rows.Add("E003", "Catherine Lee", "IT", "2021-01-20", "8200");
table.Rows.Add("E004", "David Smith", "Marketing", "2018-11-30", "7100");
table.Rows.Add("E005", "Emily Davis", "Sales", "2022-06-15", "6900");
// Вставить DataTable в лист
sheet.InsertDataTable(table, true, 1, 1);
// Применить встроенные форматы
sheet.AllocatedRange.Rows[0].BuiltInStyle = BuiltInStyles.Heading1;
for (int i = 1; i < sheet.AllocatedRange.Rows.Count(); i++)
{
sheet.AllocatedRange.Rows[i].BuiltInStyle = BuiltInStyles.Accent1;
}
sheet.AllocatedRange.AutoFitColumns();
sheet.AllocatedRange.AutoFitRows();
// Сохранить в Excel
workbook.SaveToFile("EmployeeDataExport.xlsx", FileFormat.Version2016);
Как это работает:
- InsertDataTable() вставляет данные, начиная с определенной ячейки.
- Аргумент true включает заголовки столбцов.
- SaveToFile() сохраняет книгу на диск; второй параметр указывает версию формата Excel.
- FileFormat.Version2016 указывает версию формата Excel.
Ниже приведен пример вывода, показывающий, как экспортированный DataTable выглядит в Excel:

Пример 2: Сохранение DataGridView в Excel
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
sheet.InsertDataTable(((DataTable)dataGridView1.DataSource), true, 1, 1);
workbook.SaveToFile("GridViewExport.xlsx", FileFormat.Version2016);
Совет: Перед сохранением убедитесь, что источник данных вашего DataGridView правильно приведен к DataTable. Это гарантирует, что экспортированная структура будет соответствовать макету сетки пользовательского интерфейса.
Если вы хотите узнать, как создавать файлы Excel с большим количеством типов данных, форматированием и другими элементами, вы можете изучить статью Как создавать файлы Excel на C#.
Сохранение файла Excel в формате CSV или XLS на C#
Различные системы и платформы требуют разных форматов электронных таблиц. Хотя XLSX сейчас является стандартом, CSV, XLS и другие форматы остаются распространенными в корпоративных средах. Экспорт в различные форматы позволяет обмениваться данными Excel, обрабатывать их или импортировать в различные приложения.
Пример 1: Сохранение Excel в формате CSV
CSV (значения, разделенные запятыми) — это простой текстовый формат, идеально подходящий для обмена данными с базами данных, веб-приложениями или другими системами, поддерживающими обычные текстовые файлы.
Workbook workbook = new Workbook();
workbook.LoadFromFile("EmployeeDataExport.xlsx");
workbook.SaveToFile("Report.csv", ",", FileFormat.CSV);
Пример 2: Сохранение Excel в формате XLS (устаревший формат)
XLS (формат Excel 97–2003) — это устаревший двоичный формат, который до сих пор используется в старых системах или приложениях, не поддерживающих XLSX. Сохранение в XLS обеспечивает совместимость с устаревшими корпоративными рабочими процессами.
Workbook workbook = new Workbook();
workbook.LoadFromFile("EmployeeDataExport.xlsx");
workbook.SaveToFile("Report_legacy.xls", ExcelVersion.Version97to2003);
Дополнительные поддерживаемые форматы электронных таблиц
В дополнение к часто используемым форматам CSV, XLS и XLSX, библиотека также поддерживает несколько других форматов электронных таблиц и шаблонов. В таблице ниже перечислены эти форматы вместе с соответствующими им значениями перечисления FileFormat для удобства при программном сохранении файлов.
| Формат | Описание | Соответствующий Enum (FileFormat) |
|---|---|---|
| ODS | Электронная таблица OpenDocument | FileFormat.ODS |
| XLSM | Книга Excel с поддержкой макросов | FileFormat.Xlsm |
| XLSB | Двоичная книга Excel | FileFormat.Xlsb2007 / FileFormat.Xlsb2010 |
| XLT | Шаблон Excel 97–2003 | FileFormat.XLT |
| XLTX | Шаблон Excel Open XML | FileFormat.XLTX |
| XLTM | Шаблон Excel с поддержкой макросов | FileFormat.XLTM |
Эти дополнительные форматы полезны для организаций, которые работают с устаревшими системами, стандартами открытых документов или рабочими процессами автоматизации на основе макросов/шаблонов.
Сохранение Excel в формате PDF или HTML на C#
Во многих случаях файлы Excel необходимо преобразовывать в форматы документов или веб-форматы для упрощения публикации, печати или обмена.
Экспорт в PDF идеально подходит для отчетов с фиксированным макетом и печати, в то время как HTML подходит для просмотра данных Excel в веб-браузере.
Пример 1: Сохранение Excel в формате PDF
В следующем примере показано, как сохранить книгу Excel в виде файла PDF с помощью C#. Это полезно для создания отчетов, сохраняющих макет и форматирование.
Workbook workbook = new Workbook();
workbook.LoadFromFile("EmployeeDataExport.xlsx");
workbook.SaveToFile("EmployeeDataExport.pdf", FileFormat.PDF);
Вот пример сгенерированного PDF-файла после экспорта из Excel:

Пример 2: Сохранение Excel в формате HTML
Этот пример демонстрирует, как сохранить книгу Excel в виде HTML-файла, что упрощает отображение данных в веб-браузере или интеграцию с веб-приложениями.
Workbook workbook = new Workbook();
workbook.LoadFromFile("EmployeeDataExport.xlsx");
workbook.SaveToFile("EmployeeDataExport.html", FileFormat.HTML);
Ниже приведен предварительный просмотр экспортированного HTML-файла, отображенного в браузере:

Дополнительные поддерживаемые форматы документов и веб-форматы
Помимо PDF и HTML, библиотека поддерживает несколько других форматов, удобных для документов и веба. В таблице ниже показаны эти форматы вместе с их значениями перечисления FileFormat для удобства.
| Формат | Описание | Соответствующий Enum (FileFormat) |
|---|---|---|
| XML | Данные Excel, экспортированные в формате XML | FileFormat.XML |
| Растровое изображение / Изображение | Экспорт Excel в растровое изображение или другие форматы изображений | FileFormat.Bitmap |
| XPS | Документ XML Paper Specification | FileFormat.XPS |
| PostScript | Документ PostScript | FileFormat.PostScript |
| OFD | Формат документа с фиксированным макетом Open Fixed-layout | FileFormat.OFD |
| PCL | Файл языка команд принтера | FileFormat.PCL |
| Markdown | Формат файла Markdown | FileFormat.Markdown |
Эти форматы обеспечивают дополнительную гибкость для распространения содержимого Excel на различных платформах и в рабочих процессах, будь то для печати, веб-публикации или автоматизации.
Сохранение файла Excel в MemoryStream на C#
В веб-приложениях или облачных сервисах сохранение файлов Excel непосредственно на диск может быть нецелесообразным по соображениям безопасности или производительности. Использование MemoryStream позволяет создавать файлы Excel в памяти и доставлять их непосредственно клиентам для загрузки. Spire.XLS для .NET также поддерживает как загрузку, так и сохранение книг через MemoryStream, что упрощает обработку файлов Excel полностью в памяти.
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
sheet.Range["A1"].Text = "Export to Stream";
using (MemoryStream stream = new MemoryStream())
{
workbook.SaveToStream(stream, ExcelVersion.Version2016);
byte[] bytes = stream.ToArray();
// Пример: отправить байты клиенту для загрузки в ASP.NET
// Response.BinaryWrite(bytes);
}
Этот подход особенно полезен для ASP.NET, Web API или облачных сервисов, где вы хотите динамически обслуживать файлы Excel, не создавая временных файлов на сервере.
Открытие и повторное сохранение файлов Excel на C#
Во многих приложениях вам может понадобиться загрузить существующую книгу Excel, применить обновления или изменения, а затем сохранить ее обратно на диск или преобразовать в другой формат. Это часто встречается при обновлении отчетов, изменении экспортированных данных или автоматизации рабочих процессов с файлами Excel.
Пример: открытие и обновление файла Excel
Следующий код C# загружает предыдущую книгу, обновляет первую ячейку и сохраняет изменения:
Workbook workbook = new Workbook();
workbook.LoadFromFile("EmployeeDataExport.xlsx");
Worksheet sheet = workbook.Worksheets[0];
sheet.Range["A1"].Text = "Updated Content"; // Обновить значение ячейки
sheet.Range["A1"].AutoFitColumns(); // Автоподбор ширины столбца
// Сохранить обновленную книгу
workbook.Save(); // Сохраняет в исходный файл
workbook.SaveToFile("UpdatedCopy.xlsx", ExcelVersion.Version2016); // Сохранить как новый файл
На скриншоте ниже показан обновленный лист Excel после изменения и сохранения файла:

Вы также можете ознакомиться с подробным руководством по редактированию файлов Excel с использованием C# для более сложных сценариев.
Лучшие практики при сохранении файлов Excel
-
Избегайте перезаписи файлов
Проверяйте, существует ли целевой файл, перед сохранением, чтобы предотвратить случайную потерю данных.
-
Правильно управляйте разрешениями и путями
Убедитесь, что у вашего приложения есть права на запись в целевую папку, особенно в веб- или облачных средах.
-
Выберите правильный формат
Используйте XLSX для современной совместимости, CSV для обмена данными и PDF для печати или обмена отчетами.
Заключение
Сохранение файлов Excel в C# охватывает широкий спектр операций — от записи структурированных наборов данных, экспорта в различные форматы электронных таблиц, преобразования в PDF/HTML до обработки файловых потоков в веб-приложениях.
Благодаря гибкости, предлагаемой такими библиотеками, как Spire.XLS для .NET, разработчики могут с легкостью реализовывать мощные рабочие процессы автоматизации Excel.
Часто задаваемые вопросы
В1: Как сохранить файл Excel на C#?
Используйте SaveToFile() с соответствующим ExcelVersion или FileFormat:
workbook.SaveToFile("Report.xlsx", ExcelVersion.Version2016);
В2: Как открыть и изменить существующий файл Excel?
Загрузите книгу с помощью LoadFromFile(), внесите изменения, затем сохраните:
Workbook workbook = new Workbook();
workbook.LoadFromFile("ExistingFile.xlsx");
workbook.Worksheets[0].Range["A1"].Text = "Updated Content";
workbook.SaveToFile("UpdatedFile.xlsx", ExcelVersion.Version2016);
В3: Как сохранить в формате CSV или PDF?
Укажите желаемый FileFormat в SaveToFile():
workbook.SaveToFile("Report.csv", ",", FileFormat.CSV);
workbook.SaveToFile("Report.pdf", FileFormat.PDF);
В4: Могу ли я сохранить Excel в память, а не на диск?
Да. Используйте SaveToStream() для вывода в MemoryStream, что полезно в веб- или облачных приложениях:
using (MemoryStream stream = new MemoryStream())
{
workbook.SaveToStream(stream, ExcelVersion.Version2016);
byte[] bytes = stream.ToArray();
}