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 ExcelCalendar2
    {
        public void createCalendar()
        {
            // Excelファイル名。拡張子はxlsx
            string strPath = "C:\\WORK\\excel_calendar2.xlsx";

            // 年月を求める
            DateTime today = DateTime.Today;
            int iYear = today.Year;
            int iDaysInMonth = 1;

            try
            {
                // ファイル名を指定してExcelドキュメントを作成する。
                SpreadsheetDocument document = SpreadsheetDocument.Create(strPath, SpreadsheetDocumentType.Workbook, true);

                // Excelドキュメントにワークブックパートを追加する。
                WorkbookPart wbpart = document.AddWorkbookPart();
                wbpart.Workbook = new Workbook();

                // ワークブックパートにスタイルパートを追加する。
                // スタイルを追加しないとExcelファイルを開いた際に警告がでる。
                WorkbookStylesPart stylesPart = wbpart.AddNewPart();
                stylesPart.Stylesheet = CreateStylesheet();
                stylesPart.Stylesheet.Save();
                
                // ワークブックパートにシートコレクションを追加する。
                Sheets sheets = wbpart.Workbook.AppendChild(new Sheets());

                // 12ヵ月分ループ
                for (int h = 1; h <= 12; h++)
                {
                    iDaysInMonth = DateTime.DaysInMonth(iYear, h);

                    // ワークブックパートにワークシートパートを追加する。
                    WorksheetPart wspart = wbpart.AddNewPart();
                    wspart.Worksheet = new Worksheet();

                    // シートデータインスタンスをワークシートパートに追加する。
                    // 後からこのインスタンスにデータを追加していく。
                    SheetData sheetData = new SheetData();
                    wspart.Worksheet.Append(sheetData);
                    wspart.Worksheet.Save();

                    // シートコレクションにシートを追加する。
                    Sheet sheet = new Sheet() { 
                        Id = wbpart.GetIdOfPart(wspart), SheetId = (uint)h, Name = String.Format("{0}年{1}月", iYear, h) 
                    };
                    sheets.Append(sheet);
                    wbpart.Workbook.Save();

                    // 月の日数分ループする。
                    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;
        }

    }
}