在OpenXml中沒有內置的格式來實現您的內容,但您可以輕鬆添加自己的格式。您需要的格式字符串是m/d/yyyy\ h:mm\ AM/PM
。
爲了應用,你需要創建一個NumberingFormats
對象的格式,添加NumberingFormat
它並將其分配給一個Stylesheet
的NumberingFormats
財產。下面的方法將創建一個Stylesheet
與m/d/yyyy\ h:mm\ AM/PM
格式:
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;
}
下面的代碼將使用上面添加的格式從頭開始創建新的文件2周的日期(在A1和B1):
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;
}
原始提問(基於24小時的AM/PM說明符)
不幸的是我不認爲這是可能的。
您可以自定義格式規範規定的但部分18.8.31 numFmts
:
如果格式包含AM或PM,則小時值基於12小時制,其中「AM」或「 A「表示從午夜到中午的時間,」PM「或」P「表示從中午到午夜的時間。否則,小時基於24小時制。
因此,將24小時格式與AM/PM後綴混合是不可能的。
'H:mm tt'很奇怪。你真的想用12小時說明符24小時制嗎? – Mitch
我的錯誤,我想要12小時的時間,我會更新! – naspinski