セルを日付にフォーマットするのに問題があります。
FileInfo info = new FileInfo(path);
using (ExcelPackage package = new ExcelPackage(info))
{
ExcelWorksheet ws = package.Workbook.Worksheets.Add(sheetName);
ws.Cells[3, 1].Style.Numberformat.Format = "yyyy-mm-dd";
ws.Cells["A3"].Formula = "=DATE(2014,10,5)";
}
Excelのこれからの出力:41 917,00
なぜこれが機能しないのですか?
ヨソイケに同意します。おそらく間違ったセルをターゲットにしているでしょう。あなたが試すことができます:
ws.Cells["A3"].Style.Numberformat.Format = "yyyy-mm-dd";
ws.Cells["A3"].Formula = "=DATE(2014,10,5)";
worksheet.Cells["YOURDATECELL_OR_YOURDATECELLRANGE"].Style.Numberformat.Format = "mm-dd-yy";
tarazで言及されている式を使用する場合。最後にworksheet.Calculate()を追加してください。参照 https://epplus.codeplex.com/wikipage?title=About%20Formula%20calculation
または、式を使用する代わりに、代替アプローチ
private static decimal GetExcelDecimalValueForDate(DateTime date)
{
DateTime start = new DateTime(1900, 1, 1);
TimeSpan diff = date - start;
return diff.Days + 2;
}
worksheet.Cells["A2"].Value = GetExcelDecimalValueForDate(Convert.ToDateTime('2016-04-29'));
worksheet.Cells["A2"].Style.Numberformat.Format = "mm-dd-yy";//or m/d/yy h:mm
デフォルトでは、Excelが日付フィールドを保存するとき、numFormatId
14(xlsのxmlファイルを見てください)として保存します。これにより、ファイルを開いたときに、どの国でも日付の形式が正しくなります。 Epplusでmm-dd-yy
は、ExcelのnumFormatId
14に変換されます。これにより、ファイルが任意の国で開かれたときに、その国の短い日付設定に基づいて日付が正しくフォーマットされます。 m/d/yy h:mm
はどの国でも正しくフォーマットされます。
var dateColumns = from DataColumn d in dt.Columns
where d.DataType == typeof(DateTime) || d.ColumnName.Contains("Date")
select d.Ordinal + 1;
foreach (var dc in dateColumns)
{
worksheet.Cells[2, dc, rowCount + 2, dc].Style.Numberformat.Format = "mm/dd/yyyy hh:mm:ss AM/PM";
}
指定された/提供された特定のフォーマットにヘッダー日付を持つすべての列をフォーマットします
IEnumerable(データ)を取得する汎用ソリューションは、汎用オブジェクトのプロパティをループ処理し、DateTypeまたはnullableDate Typeのどれであるかを検出し、フォーマットを適用します。
//set the list of dateColumns which will be used to formate them
List<int> dateColumns = new List<int>();
//get the first indexer
int datecolumn = 1;
//loop through the object and get the list of datecolumns
foreach (var PropertyInfo in data.FirstOrDefault().GetType().GetProperties())
{
//check if property is of DateTime type or nullable DateTime type
if (PropertyInfo.PropertyType == typeof(DateTime) || PropertyInfo.PropertyType == typeof(DateTime?))
{
dateColumns.Add(datecolumn);
}
datecolumn++;
}
// Create the file using the FileInfo object
var file = new FileInfo(outputDir + fileName);
//create new Excel package and save it
using (var package = new ExcelPackage())
{
//create new worksheet
var worksheet = package.Workbook.Worksheets.Add("Results");
// add headers
worksheet.Cells["A1"].LoadFromCollection(data, true);
//format date field
dateColumns.ForEach(item => worksheet.Column(item).Style.Numberformat.Format = "dd-mm-yyyy");
// auto size columns
worksheet.Cells.AutoFitColumns();
//save package
package.SaveAs(file);
}
いくつかのニュース:
ws.Cells ["A3"]。Style.Numberformat.Format = "[$ -en-US] yyyy-mmm-dd";
ws.Cells ["A3"]。Formula = "= DATE(2014,10,5)";