Использование C# и NPOI для работы с файлами Excel

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Что такое NPOI?

NPOI - это .NET-версия проекта POI на Java, расположенного по адресу http://poi.apache.org/. POI является проектом с открытым исходным кодом, который может помочь вам читать/записывать файлы xls(x), doc(x), ppt(x). Он имеет широкое применение.
Например, вы можете использовать его для:

  • создания отчета Excel без установленного на сервере пакета Microsoft Office и более эффективной работы, чем вызов компонента Microsoft Excel ActiveX в фоновом режиме;

  • извлечения текста и изображений из документов Excel, Word и PowerPoint;

  • создания листов Excel, содержащих формулы.

В этой статье я собираюсь познакомить вас с тем, как создавать, читать и обновлять файлы .XLSX с использованием NPOI на языке C#.

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

PM>Install-Package NPOI

Использование пространства имен NPOI

using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.SS.Util;
using NPOI.HSSF.Util;

Пример 1. Создание нового документа Excel и добавление данных

// Создание новой рабочей книги
IWorkbook workbook = new XSSFWorkbook();

// Создание нового листа
ISheet sheet = workbook.CreateSheet("Sheet1");

// Добавление данных в ячейки
IRow row = sheet.CreateRow(0);
row.CreateCell(0).SetCellValue("Привет");
row.CreateCell(1).SetCellValue("Мир");

// Сохранение документа Excel
using (FileStream fileStream = new FileStream("path/file.xlsx", FileMode.Create))
{
    workbook.Write(fileStream, false);
}

Пример 2. Чтение данных из существующего документа Excel

// Открытие существующей рабочей книги
IWorkbook workbook;
using (FileStream fileStream = new FileStream("path/file.xlsx", FileMode.Open, FileAccess.Read))
{
    workbook = new XSSFWorkbook(fileStream);
}

// Получение листа
ISheet sheet = workbook.GetSheetAt(0);

// Чтение данных из ячейки
IRow row = sheet.GetRow(0);
string cellValue = row.GetCell(0).StringCellValue;

// Вывод данных ячейки
Console.WriteLine(cellValue);

Пример 3. Обновление данных в документе Excel

// Открытие существующей рабочей книги
IWorkbook workbook;
using (FileStream fileStream = new FileStream("path/file.xlsx", FileMode.Open, FileAccess.ReadWrite))
{
    workbook = new XSSFWorkbook(fileStream);
}

// Получение листа
ISheet sheet = workbook.GetSheetAt(0);

// Обновление данных ячейки
IRow row = sheet.GetRow(0);
row.GetCell(0).SetCellValue("Обновленное значение");

// Сохранение документа Excel
using (FileStream fileStream = new FileStream("path/file.xlsx", FileMode.Create))
{
    workbook.Write(fileStream, false);
}

Дополнительные настройки

Объединение ячеек

// Параметры CellRangeAddress: начальная строка, конечная строка, начальный столбец, конечный столбец
sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 0));

Настройка выравнивания

// Создание объекта стиля
ICellStyle cellStyle = workbook.CreateCellStyle();
// Настройка горизонтального выравнивания
cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
// Настройка вертикального выравнивания
cellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
// Настройка отступа
cellStyle.Indention = 3;
// Автоматический перенос текста
cellStyle.WrapText = true;
// Уменьшение размера шрифта для заполнения ячейки
cellStyle.ShrinkToFit = true;
// Вращение текста
cellStyle.Rotation = 90;
// Применение стиля
sheet.GetRow(0).GetCell(0).CellStyle = cellStyle;

Настройка шрифта

// Создание объекта шрифта
IFont font = workbook.CreateFont();
// Настройка шрифта
font.FontName = "Times New Roman";
// Жирный шрифт
font.IsBold = true;
// Курсивный шрифт
font.IsItalic = true;
// Размер шрифта
font.FontHeightInPoints = 14;
// Подчеркнутый шрифт
font.Underline = FontUnderlineType.Single;
// Цвет шрифта
font.Color = HSSFColor.Black.Index;
// Зачеркнутый шрифт
font.IsStrikeout = true;
// Верхний индекс
//font.TypeOffset = FontSuperScript.Super;
// Нижний индекс
//font.TypeOffset = FontSuperScript.Sub;
// Создание объекта стиля
ICellStyle cellStyle = workbook.CreateCellStyle();
cellStyle.SetFont(font);
// Применение стиля
sheet.GetRow(0).GetCell(0).CellStyle = cellStyle;

Настройка цвета заливки ячейки

// Создание объекта стиля
ICellStyle cellStyle = workbook.CreateCellStyle();
// Настройка цвета
cellStyle.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Pink.Index;
cellStyle.FillPattern = FillPattern.SolidForeground;
// Применение стиля
sheet.GetRow(0).GetCell(0).CellStyle = cellStyle;

Настройка высоты строки и ширины столбца

// Высота строки
row.Height = 25 * 20;
// Ширина столбца
sheet.SetColumnWidth(0, 18 * 256);

Источник: https://habr.com/ru/articles/745696/


Интересные статьи

Интересные статьи

Согласно отчету GlobalWebIndex, около 76% интернет-пользователей участвуют в онлайн-сообществе.Таким образом, вполне естественно, что компании пытаются получить долю от этой новой возможности продаж и...
 - Кто в нашей компании отвечает за согласование доступа в выходные на объект N? - Александр Иванов. - А какой у него телефон?С таким диалогом легко справится любой офисный клерк, но дл...
Привет, Хабр! Часто по работе сталкиваюсь с вопросами вроде: как же работают блокировщики рекламы? Хочу поделиться с вами некоторыми интересными, но порой сомни...
Военные придумали много полезного: стратегия, тактика, логистика, уставы, шифрование, исследование операций, боевые порядки… Необходимость управления большим количеством людей требует...
Предыстория Привет, Хабр! К написанию этого поста привела довольно странная ошибка, которую вчера вечером на ноутбуке с Linux (да, я их тех странных людей, кто использует GNU/Linux на ноутбуке)...