Open XML Excel の出力
新規に Open XML のスプレッドシートを出力するプログラム。
Excelに比べると非常に面倒です。
いちいち行や列のインスタンスを作るのが面倒・・・・
Cell は DataType を設定すると同時に、子要素に InlineString のインスタンスを追加して、またその子要素に DataType で指定した型に合うインスタンスを追加する必要があるみたいです。
使用ライブラリ: Open XML SDK 2.0 参照設定: DocumentFormat.OpenXml WindowsBase ※ DocumentFormat.OpenXml は C:\Program Files (x86)\Open XML SDK\V2.0\lib にあります。
using System; using System.Diagnostics; using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Spreadsheet; using DocumentFormat.OpenXml.Packaging; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { using (var doc = SpreadsheetDocument.Create("test.xlsx", SpreadsheetDocumentType.Workbook)) { // WorkBookPart var workBookPart = doc.AddWorkbookPart(); workBookPart.Workbook = new Workbook(); // WorkSheetPart var workSheetPart = workBookPart.AddNewPart<WorksheetPart>(); //////////////////////////////////////////////////////////////////////////////////////// // WorkSheet データ、テーブル構造、Cellの位置 など //////////////////////////////////////////////////////////////////////////////////////// // WorkSheetの作成 var workSheet = new Worksheet(); // SheetDataの作成 var sheetData = new SheetData(); // Defualt Cell var textCell = new Cell() { DataType = CellValues.InlineString }; // 書き込むテキストデータの作成 var texts = new Text[] { new Text("C1"), new Text("A2"), new Text("B3"), }; // テキストデータのセル var dataCells = new Cell[] { (Cell)textCell.Clone(), (Cell)textCell.Clone(), (Cell)textCell.Clone() }; for (var i = 0; i < dataCells.Length; i++) { dataCells[i].AppendChild<InlineString>(new InlineString(texts[i])); } // 行と列を作成して、テキストデータを内包させる。 var rows = new Row[] { new Row(new Cell(), new Cell(), dataCells[0]) , new Row(dataCells[1], new Cell(), new Cell()) , new Row(new Cell(), dataCells[2], new Cell()) }; // 追加 foreach (var row in rows) { sheetData.AppendChild<Row>(row); } workSheet.AppendChild<SheetData>(sheetData); workSheetPart.Worksheet = workSheet; // Sheets var sheets = doc.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets()); // Sheetの作成 var sheet = new Sheet() { Id = doc.WorkbookPart.GetIdOfPart(workSheetPart), SheetId = 1, Name = "SheetName1" }; // Sheetの追加 sheets.Append(sheet); //////////////////////////////////////////////////////////////////////////////////////// // Workbookの保存 workBookPart.Workbook.Save(); // ドキュメントを閉じる doc.Close(); } try { var process = Process.Start("test.xlsx"); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } Console.WriteLine("終了します。"); Console.ReadLine(); } } }