OpenXmlの中で成し遂げたことを達成するための組み込みのフォーマットはありませんが、独自のフォーマットを簡単に追加できます。必要な書式文字列はm/d/yyyy\ h:mm\ AM/PM
です。
あなたがNumberingFormats
オブジェクトを作成する必要があるフォーマットを適用するためには、それにNumberingFormat
を追加し、Stylesheet
上NumberingFormats
プロパティに割り当てます。以下の方法はm/d/yyyy\ h:mm\ AM/PM
形式でStylesheet
を作成します。
private static Stylesheet CreateStyles()
{
Stylesheet styleSheet = new Stylesheet();
NumberingFormats nfs = new NumberingFormats();
NumberingFormat nf;
nf = new NumberingFormat();
nf.NumberFormatId = 165;
nf.FormatCode = "m/d/yyyy\\ h:mm\\ AM/PM";
nfs.Append(nf);
CellFormat cf = new CellFormat();
cf.NumberFormatId = nf.NumberFormatId;
cf.ApplyNumberFormat = true;
CellFormats cfs = new CellFormats();
cfs.Append(cf);
styleSheet.CellFormats = cfs;
styleSheet.NumberingFormats = nfs;
styleSheet.Borders = new Borders();
styleSheet.Borders.Append(new Border());
styleSheet.Fills = new Fills();
styleSheet.Fills.Append(new Fill());
styleSheet.Fonts = new Fonts();
styleSheet.Fonts.Append(new Font());
CellStyles css = new CellStyles();
CellStyle cs = new CellStyle();
cs.FormatId = 0;
cs.BuiltinId = 0;
css.Append(cs);
css.Count = UInt32Value.FromUInt32((uint)css.ChildElements.Count);
styleSheet.Append(css);
return styleSheet;
}
上に追加のフォーマットを使用して(A1及びB1で)2つの日付とスクラッチから新しいファイルを作成する次のコード
public static void CreateFile(string filename)
{
using (SpreadsheetDocument spreadsheetDocument =
SpreadsheetDocument.Create(filename, SpreadsheetDocumentType.Workbook))
{
// Add a WorkbookPart to the document.
WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
workbookpart.Workbook = new Workbook();
workbookpart.AddNewPart<WorkbookStylesPart>();
// Add a WorksheetPart to the WorkbookPart.
WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
// Add Sheets to the Workbook.
Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());
// Append a new worksheet and associate it with the workbook.
Sheet sheet = new Sheet()
{
Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart),
SheetId = 1,
Name = "Sheet 1"
};
sheets.Append(sheet);
Worksheet worksheet = new Worksheet();
SheetData sheetData = new SheetData();
Stylesheet styleSheet = CreateStyles();
Row row = CreateRow();
sheetData.Append(row);
worksheet.Append(sheetData);
worksheetPart.Worksheet = worksheet;
workbookpart.WorkbookStylesPart.Stylesheet = styleSheet;
// Close the document.
spreadsheetDocument.Close();
}
}
private static Row CreateRow()
{
Row row = new Row();
DateTime now = DateTime.UtcNow;
//add a date cell using the number data type
Cell cell = new Cell();
cell.StyleIndex = 0;
cell.DataType = CellValues.Number;
string columnValue = now.ToOADate().ToString();
cell.CellValue = new CellValue(columnValue);
row.Append(cell);
//add a date cell using the date data type
Cell cell2 = new Cell();
cell2.StyleIndex = 0;
cell2.DataType = CellValues.Date;
columnValue = now.ToString("o");
cell2.CellValue = new CellValue(columnValue);
row.Append(cell2);
return row;
}
を
元の回答(AM/PM指定子で24時間を基準にして)
残念ながら私はこれが可能ではないと思います。
あなたは定義することができ、カスタムフォーマット仕様状態のしかしセクション18.8.31 numFmts
:フォーマットは、AMまたはPMが含まれてい
場合は、時間は12時間制、「AM」または「に基づいています「A」は真夜中から正午までの時間を示し、「PM」または「P」は正午から真夜中までの時間を示す。それ以外の場合、時間は24時間制に基づいています。
したがって、AM/PM接尾辞と24時間形式を混在させることはできません。
'H:mm ttは非常に奇妙です。あなたは実際に12時間指定子で24時間の時間を望んでいますか? – Mitch
私の間違い、私は12時間を欲しい、私は更新されます! – naspinski