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;
        }

    }
}