NPOIは.NETプラットフォーム向けのPOI実装であり、Microsoft Officeがインストールされていない環境でもExcel、Word、PowerPointなどのファイルを読み書きできるライブラリです。
主要コンポーネント
- NPOI.Util - 基本ユーティリティライブラリ
- NPOI.POIFS - OLE2フォーマット読み書きライブラリ
- NPOI.DDF - Microsoft Drawingフォーマット読み書きライブラリ
- NPOI.SS - Excel数式計算ライブラリ
- NPOI.HPSF - OLE2の要約情報プロパティ読み書きライブラリ
- NPOI.HSSF - Excel BIFFフォーマット読み書きライブラリ
Excelブックの作成
NPOI.HSSF.UserModel.HSSFWorkbookクラスを使用してExcelドキュメントを作成します。
// 新しいExcelブックの作成
HSSFWorkbook workbook = new HSSFWorkbook();
// シートの追加(少なくとも1つのシートが必要)
workbook.CreateSheet("データシート");
// ファイルストリームの作成
using (FileStream output = new FileStream(@"C:\output\sample.xls", FileMode.Create))
{
workbook.Write(output);
}
Excelからテキストファイルへのデータ変換
using NPOI.HSSF.UserModel;
using System.IO;
using NPOI.SS.UserModel;
public class ExcelToTextConverter
{
public void ConvertExcelToText()
{
using (FileStream input = new FileStream(@"C:\data\source.xls", FileMode.Open))
using (FileStream output = new FileStream(@"C:\data\output.txt", FileMode.Create))
using (StreamWriter writer = new StreamWriter(output, Encoding.UTF8))
{
HSSFWorkbook workbook = new HSSFWorkbook(input);
ISheet worksheet = workbook.GetSheet("Sheet1");
for (int rowIndex = 0; rowIndex <= worksheet.LastRowNum; rowIndex++)
{
IRow row = worksheet.GetRow(rowIndex);
if (row != null)
{
for (int cellIndex = 0; cellIndex < row.LastCellNum; cellIndex++)
{
ICell cell = row.GetCell(cellIndex);
writer.Write(cell?.ToString() + "\t");
}
writer.WriteLine();
}
}
}
}
}
テキストファイルからExcelへのデータ変換
public class TextToExcelConverter
{
public void ConvertTextToExcel()
{
using (FileStream input = new FileStream(@"C:\data\source.txt", FileMode.Open))
using (StreamReader reader = new StreamReader(input, Encoding.UTF8))
{
HSSFWorkbook workbook = new HSSFWorkbook();
ISheet worksheet = workbook.CreateSheet("インポートデータ");
string currentLine;
int rowNumber = 0;
while ((currentLine = reader.ReadLine()) != null)
{
IRow row = worksheet.CreateRow(rowNumber);
string[] values = currentLine.Split('\t');
for (int i = 0; i < values.Length; i++)
{
row.CreateCell(i).SetCellValue(values[i]);
}
rowNumber++;
}
using (FileStream output = new FileStream(@"C:\data\output.xls", FileMode.Create))
{
workbook.Write(output);
}
}
}
}
表示設定のカスタマイズ
ズームレベルの設定
worksheet.SetZoom(3, 4); // 75%表示
セルの保護
ICellStyle lockedStyle = workbook.CreateCellStyle();
lockedStyle.IsLocked = true;
ICell targetCell = worksheet.GetRow(0).GetCell(0);
targetCell.CellStyle = lockedStyle;
worksheet.ProtectSheet("password123");
行・列の固定
// 最初の3列と1行を固定
worksheet.CreateFreezePane(3, 1, 10, 10);
アクティブセルの設定
// 単一セルの選択
cell.SetAsActiveCell();
// セル範囲の選択
worksheet.SetActiveCellRange(1, 4, 0, 4); // 2-5行、1-5列
複数範囲の選択
var ranges = new List<CellRangeAddress8Bit>()
{
new CellRangeAddress8Bit(0, 2, 1, 4),
new CellRangeAddress8Bit(5, 6, 7, 8)
};
worksheet.SetActiveCellRange(ranges, 1, 0, 2);
表示範囲の制限
worksheet.TopRow = 5;
worksheet.LeftCol = 3;
アクティブシートの設定
workbook.SetActiveSheet(0); // 最初のシートをアクティブに
データ検証
var validationRange = new CellRangeAddressList(0, 9, 0, 0);
var dateConstraint = DVConstraint.CreateDateConstraint(
OperatorType.BETWEEN,
"2024-01-01",
"2024-12-31",
"yyyy-MM-dd");
var validation = new HSSFDataValidation(validationRange, dateConstraint);
validation.CreateErrorBox("入力エラー", "有効な日付を入力してください");
worksheet.AddValidationData(validation);
行・列のグループ化
worksheet.GroupRow(0, 4); // 1-5行をグループ化
worksheet.GroupColumn(0, 2); // 1-3列をグループ化
グリッドラインの表示制御
worksheet.DisplayGridlines = false;