Using C# and NPOI to Work with Excel Files
What is NPOI?
NPOI is the .NET version of the Java POI project located at http://poi.apache.org/. POI is an open source project that can help you read/write xls(x), doc(x), ppt(x) files. It has wide application.
For example, you can use it for:
create an Excel report without Microsoft Office installed on the server and work more efficiently than calling the Microsoft Excel ActiveX component in the background;
extracting text and images from Excel, Word and PowerPoint documents;
creating Excel sheets containing formulas.
In this article, I’m going to walk you through how to create, read, and update .XLSX files using NPOI in C#.
Installing NOPI via NuGet
PM>Install-Package NPOI
Using the NPOI namespace
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.SS.Util;
using NPOI.HSSF.Util;
Example 1: Create a new Excel document and add data
// Создание новой рабочей книги
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);
}
Example 2: Reading data from an existing Excel document
// Открытие существующей рабочей книги
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);
Example 3: Refreshing data in an Excel document
// Открытие существующей рабочей книги
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);
}
Additional settings
Merging cells
// Параметры CellRangeAddress: начальная строка, конечная строка, начальный столбец, конечный столбец
sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 0));
Alignment setting
// Создание объекта стиля
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;
Font setting
// Создание объекта шрифта
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;
Setting the cell fill color
// Создание объекта стиля
ICellStyle cellStyle = workbook.CreateCellStyle();
// Настройка цвета
cellStyle.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Pink.Index;
cellStyle.FillPattern = FillPattern.SolidForeground;
// Применение стиля
sheet.GetRow(0).GetCell(0).CellStyle = cellStyle;
Setting row height and column width
// Высота строки
row.Height = 25 * 20;
// Ширина столбца
sheet.SetColumnWidth(0, 18 * 256);