Nuget
ClosedXMLをインストール
ファイルを開いてシート名をすべて表示
using ClosedXML.Excel;
try
{
var filePath = @"c:\temp\Sample.xlsx";
using (var workbook = new XLWorkbook(filePath))
{
Console.WriteLine($"シート数: {workbook.Worksheets.Count}");
foreach (var sheet in workbook.Worksheets)
{
Console.WriteLine($"シート名: {sheet.Name}");
}
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
Excelを開いていると、ファイルオープン時にエラーになるので・・・
読み取り専用で開く場合は、ClosedXML自体には機能がないので
FileStreamで読み取り専用で開いてそれを使って開くとよい
using ClosedXML.Excel;
try
{
var filePath = @"c:\temp\Sample.xlsx";
// 読み取りで開き、他ファイルは読み書きOKとする
using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (var workbook = new XLWorkbook(fileStream))
{
Console.WriteLine($"シート数: {workbook.Worksheets.Count}");
foreach (var sheet in workbook.Worksheets)
{
Console.WriteLine($"シート名: {sheet.Name}");
}
}
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
Excelで開いている間にClosedXMLで開くとエラーになるが、
CLosedXMLで開いている間にExcelは開くことが可能なので、処理して保存する際にエラーとなる可能性はある。
そういうケースを気にするのであれば、FileStreamで排他制御する必要あり。
using ClosedXML.Excel;
try
{
var filePath = @"c:\temp\Sample.xlsx";
// 読み書き開き、他ファイルは読み書き禁止とする
using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
using (var workbook = new XLWorkbook(fileStream))
{
Console.WriteLine($"シート数: {workbook.Worksheets.Count}");
foreach (var sheet in workbook.Worksheets)
{
Console.WriteLine($"シート名: {sheet.Name}");
}
}
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
セルの操作
A1形式でアクセス
worksheet.Cell(2, "C").value
行列でアクセス
worksheet.Cell(2, 3).value