OpenXML : Excelに月の日付を書き出す 2017/1
using System; using System.Collections.Generic; using System.Linq; using System.Text; // 以下追加 using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; namespace OpenXMLTest { /// Excelファイルの作成 class ExcelCalendar1 { public void createCalendar() { // Excelファイル名。拡張子はxlsx string strPath = "C:\\WORK\\excel_calendar1.xlsx"; // 年月を求める DateTime today = DateTime.Today; int iYear = today.Year; int iMonth = today.Month; int iDaysInMonth = DateTime.DaysInMonth(iYear, iMonth); try { // ファイル名を指定してExcelドキュメントを作成する。 SpreadsheetDocument document = SpreadsheetDocument.Create( strPath, SpreadsheetDocumentType.Workbook, true ); // Excelドキュメントにワークブックパートを追加する。 WorkbookPart wbpart = document.AddWorkbookPart(); wbpart.Workbook = new Workbook(); // ワークブックパートにワークシートパートを追加する。 WorksheetPart wspart = wbpart.AddNewPart(); wspart.Worksheet = new Worksheet(); // ワークブックパートにスタイルパートを追加する。 // スタイルを追加しないとExcelファイルを開いた際に警告がでる。 WorkbookStylesPart stylesPart = wbpart.AddNewPart (); stylesPart.Stylesheet = CreateStylesheet(); stylesPart.Stylesheet.Save(); // シートデータインスタンスをワークシートパートに追加する。 // 後からこのインスタンスにデータを追加していく。 SheetData sheetData = new SheetData(); wspart.Worksheet.Append(sheetData); // ワークブックパートにシートコレクションを追加する。 Sheets sheets = wbpart.Workbook.AppendChild (new Sheets()); // シートコレクションにシートを追加する。 Sheet sheet = new Sheet() { Id = wbpart.GetIdOfPart(wspart), SheetId = 1, Name = String.Format("{0}年{1}月", iYear, iMonth) }; sheets.Append(sheet); // 月の日数分ループする。 for (int i = 1; i <= iDaysInMonth; i++) { // 新規行を追加 Row row = new Row(); // セルを追加 Cell cell = new Cell(); cell.DataType = CellValues.String; cell.CellReference = string.Format("A{0}", i); cell.CellValue = new CellValue(i.ToString()); cell.StyleIndex = 0; // 行にセルを追加 row.Append(cell); // シートデータに行を追加 sheetData.Append(row); } // Excelドキュメントを保存。 document.Close(); System.Diagnostics.Debug.WriteLine("Done"); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex); } } // セル書式の作成 private static Stylesheet CreateStylesheet() { // スタイルシートインスタンス。 Stylesheet sSheet = new Stylesheet(); // フォントコレクション。 Fonts fonts = new Fonts(); // フォントの作成。 Font font = new Font(); // コレクションへフォントを追加する。 fonts.Append(font); // フォント数。 fonts.Count = UInt32Value.FromUInt32((uint)fonts.ChildElements.Count); // 塗りつぶしコレクション。 Fills fills = new Fills(); // 塗りつぶしの作成(デフォルト:塗りつぶしなし)。 Fill fill = new Fill(); // 塗りつぶしをコレクションへ追加する。 fills.Append(fill); // 塗りつぶし数。 fills.Count = UInt32Value.FromUInt32((uint)fills.ChildElements.Count); // 罫線コレクション。 Borders borders = new Borders(); // 罫線の作成(デフォルト:罫線なし)。 Border border = new Border(); // コレクションへ罫線を追加する。 borders.Append(border); // 罫線数。 borders.Count = UInt32Value.FromUInt32((uint)borders.ChildElements.Count); CellStyleFormats csFormats = new CellStyleFormats(); CellFormat format = new CellFormat(); format.FontId = 0; format.FillId = 0; format.BorderId = 0; csFormats.Append(format); csFormats.Count = UInt32Value.FromUInt32((uint)csFormats.ChildElements.Count); // 数式コレクションの作成。 NumberingFormats nFormats = new NumberingFormats(); // 数式の作成。 NumberingFormat nFormat = new NumberingFormat(); nFormats.Append(nFormat); // セル書式の作成。 CellFormats cFormats = new CellFormats(); format = new CellFormat(); format.NumberFormatId = 0; // 上記参照 format.FontId = 0; // 上記参照 format.FillId = 0; // 上記参照 format.BorderId = 0; // 上記参照 format.FormatId = 0; // 上記参照 cFormats.Append(format); // 上記参照 cFormats.Count = UInt32Value.FromUInt32((uint)cFormats.ChildElements.Count); sSheet.Append(fonts); sSheet.Append(fills); sSheet.Append(borders); sSheet.Append(csFormats); sSheet.Append(cFormats); CellStyles cStyles = new CellStyles(); CellStyle cStyle = new CellStyle(); cStyle.Name = StringValue.FromString("Normal"); cStyle.FormatId = 0; cStyle.BuiltinId = 0; cStyles.Append(cStyle); cStyles.Count = UInt32Value.FromUInt32((uint)cStyles.ChildElements.Count); sSheet.Append(cStyles); DifferentialFormats dFormats = new DifferentialFormats(); dFormats.Count = 0; sSheet.Append(dFormats); TableStyles tStyles = new TableStyles(); tStyles.Count = 0; tStyles.DefaultTableStyle = StringValue.FromString("TableStyleMedium9"); tStyles.DefaultPivotStyle = StringValue.FromString("PivotStyleLight16"); sSheet.Append(tStyles); return sSheet; } } }