C#でExcelファイルを読み書きする方法

C#でExcelファイルを読み書きする方法

はじめに

C#では、Excelファイルの読み書きを行う方法がいくつかあります。本記事では、主にOpenXmlNPOIの2つのライブラリを用いて、Excelの基本的な操作を解説します。

環境の準備

まず、以下のライブラリをインストールします。

  • OpenXml: Install-Package DocumentFormat.OpenXml
  • NPOI: Install-Package NPOI

OpenXmlを使ったExcel操作

Excelファイルの作成


using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System;

class Program
{
    static void Main()
    {
        using (SpreadsheetDocument document = SpreadsheetDocument.Create("sample.xlsx", SpreadsheetDocumentType.Workbook))
        {
            WorkbookPart workbookPart = document.AddWorkbookPart();
            workbookPart.Workbook = new Workbook();
            WorksheetPart worksheetPart = workbookPart.AddNewPart();
            worksheetPart.Worksheet = new Worksheet(new SheetData());
            Sheets sheets = document.WorkbookPart.Workbook.AppendChild(new Sheets());
            Sheet sheet = new Sheet() { Id = document.WorkbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "Sheet1" };
            sheets.Append(sheet);
            workbookPart.Workbook.Save();
        }
        Console.WriteLine("Excelファイルを作成しました。");
    }
}
    

Excelファイルの読み込み


using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System;

class Program
{
    static void Main()
    {
        using (SpreadsheetDocument document = SpreadsheetDocument.Open("sample.xlsx", false))
        {
            WorkbookPart workbookPart = document.WorkbookPart;
            SheetData sheetData = workbookPart.WorksheetParts.First().Worksheet.GetFirstChild();
            foreach (Row r in sheetData.Elements())
            {
                foreach (Cell c in r.Elements())
                {
                    Console.Write(c.CellValue.Text + " ");
                }
                Console.WriteLine();
            }
        }
    }
}
    

NPOIを使ったExcel操作

Excelファイルの作成


using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.IO;

class Program
{
    static void Main()
    {
        IWorkbook workbook = new XSSFWorkbook();
        ISheet sheet = workbook.CreateSheet("Sheet1");
        IRow row = sheet.CreateRow(0);
        row.CreateCell(0).SetCellValue("Hello, Excel!");

        using (FileStream stream = new FileStream("sample.xlsx", FileMode.Create, FileAccess.Write))
        {
            workbook.Write(stream);
        }
    }
}
    

Excelファイルの読み込み


using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.IO;

class Program
{
    static void Main()
    {
        using (FileStream stream = new FileStream("sample.xlsx", FileMode.Open, FileAccess.Read))
        {
            IWorkbook workbook = new XSSFWorkbook(stream);
            ISheet sheet = workbook.GetSheetAt(0);
            IRow row = sheet.GetRow(0);
            ICell cell = row.GetCell(0);
            Console.WriteLine(cell.StringCellValue);
        }
    }
}
    

まとめ

C#でExcelファイルを扱う方法にはOpenXmlNPOIがあり、それぞれに利点があります。
OpenXml: Microsoft公式ライブラリで軽量だが、操作がやや複雑
NPOI: 直感的な操作が可能で、より柔軟な機能を提供

プロジェクトの要件に応じて適切なライブラリを選びましょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です