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