C# で Excel ファイルを出力する場合、.xls ファイルだと
という選択肢があった。 Microsoft.Office.Interop は Excel のインストールが必要だし、 ExcelCreator は有料だしと、 趣味のアプリとかではちょっと使いづらい。 主に金銭的に。
Office 2007 以降の .xlsx ファイルでいいなら、 Microsoft が提供している Open XML SDK を使って出力できる。 なんと、Open XML SDK はオープンソースになっていて、 GitHub にソースコードがあるからスバラシイ。
ただ、Open XML SDK の API はクセがあるね。 ワークシートに 2 行書き込んだだけのファイルを出力するだけのサンプルを書いてみたけど、 使い方を調べるのに思いのほか時間がかかった。 ドキュメントの構造をかなり意識したコードを書かないといけないっぽいな。
using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; using System; using System.IO; namespace ExcelSample { class Program { static void Main(string[] args) { // 出力先はデスクトップ var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "sample.xlsx"); // スプレッドシートドキュメントを作成 var document = SpreadsheetDocument.Create(path, SpreadsheetDocumentType.Workbook); // WorkbookPart をドキュメントに追加 var workbookPart = document.AddWorkbookPart(); workbookPart.Workbook = new Workbook(); // WorksheetPart を WorkbookPart に追加 var worksheetPart = workbookPart.AddNewPart<WorksheetPart>(); var sheetData = new SheetData(); worksheetPart.Worksheet = new Worksheet(sheetData); // Sheets をワークブックに追加 var sheets = workbookPart.Workbook.AppendChild(new Sheets()); // ワークシートをワークブックに追加 var sheet = new Sheet() { Id = workbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "Sample", }; sheets.Append(sheet); // sheetData に行を追加 var row1 = new Row(); row1.Append(new Cell() { DataType = CellValues.String, CellValue = new CellValue("A1 のセル"), }); sheetData.Append(row1); var row2 = new Row(); row2.Append(new Cell() { DataType = CellValues.String, CellValue = new CellValue("A2 のセル"), }); sheetData.Append(row2); // ワークブックを保存 worksheetPart.Worksheet.Save(); // ドキュメントを閉じる document.Close(); Console.WriteLine("Excel ファイルの出力に成功しました。"); } } }