有什么方法可以像在 C# 中那样使用不变区域性来格式化 Excel 中的日期单元格
Is there any way to format date cell in Excel with Invariant culture like in C#
我面临的问题是 Excel sheet 的单元格中写入了日期。单元格的格式为自定义格式,例如:
[$-de]dd/mm/yyyy (dddd)
但是只有 (dddd) 部分被处理给我 "Sonntag"(德语中的星期日)。
即使我将自定义格式的文化写成 "de",日期时间格式也不是固定的。有没有办法在不改变日期时间格式(yyyy-mm-dd)的情况下实现以下结果?
Tried Output Expected output
-------- ----------------------- -------------------
[$-fr]yyyy-mm-dd (dddd) => 2019-07-31 (dimanche) 31/7/2019 (dimanche)
[$-de]yyyy-mm-dd (dddd) => 2019-07-31 (Sonntag) 31.7.2019 (Sonntag)
[$-en]yyyy-mm-dd (dddd) => 2019-07-31 (Sunday) 7.31.2019 (Sunday)
假设您的日期从 A1
开始,请尝试在另一个 column/cell 中使用以下公式
=TEXT(A1,"mm/dd/yyy (dddd[$-fr])")
希望对您有所帮助!
您可以将文本字符串类型从“/”更改为“.”或者任何你想要的和语言格式通过改变这个元素 [$-fr]
由于您在字符串 (yyyy-mm-dd
) 中指定了确切的数据格式,因此 excel 在打开时必须遵守它。据我所知,excel 没有真正的 "default" 格式与您要查找的内容匹配。如果您打开 Excel 并指定单元格的格式,您可以设置 Culture/Country 但您仍然必须选择格式 - 第一个通常使用 / 作为分隔符。
但是如果您想使用 .NET 中的内容,您可以使用 CultureInfo.DateTimeFormat
来获得我认为您想要的内容:
CultureInfo c;
var dt = new DateTime(2019,7,31);
c = new CultureInfo("fr-FR");
Console.WriteLine($"{c}: {c.DateTimeFormat.ShortDatePattern}");
Console.WriteLine(dt.ToString($"{c.DateTimeFormat.ShortDatePattern} (dddd)", c.DateTimeFormat));
Console.WriteLine();
c = new CultureInfo("de-DE");
Console.WriteLine($"{c}: {c.DateTimeFormat.ShortDatePattern}");
Console.WriteLine(dt.ToString($"{c.DateTimeFormat.ShortDatePattern} (dddd)", c.DateTimeFormat));
Console.WriteLine();
c = new CultureInfo("en-EN");
Console.WriteLine($"{c}: {c.DateTimeFormat.ShortDatePattern}");
Console.WriteLine(dt.ToString($"{c.DateTimeFormat.ShortDatePattern} (dddd)", c.DateTimeFormat));
Console.WriteLine();
会在输出中给你这个:
fr-FR: dd/MM/yyyy
31/07/2019 (mercredi)
de-DE: dd.MM.yyyy
31.07.2019 (Mittwoch)
en-EN: M/d/yyyy
7/31/2019 (Wednesday)
要在 excel 中使用,请执行以下操作:
[TestMethod]
public void Culture_Info_Data_Format_Test()
{
//
var fileInfo = new FileInfo(@"c:\temp\Culture_Info_Data_Format_Test.xlsx");
if (fileInfo.Exists)
fileInfo.Delete();
using (var pck = new ExcelPackage(fileInfo))
{
var dt = new DateTime(2019, 7, 31);
var workbook = pck.Workbook;
var worksheet = workbook.Worksheets.Add("Sheet1");
worksheet.Column(1).Width = 50;
var c = new CultureInfo("fr-FR");
var format = $"[$-fr]{c.DateTimeFormat.ShortDatePattern} (dddd)";
worksheet.Cells[1, 1].Value = dt;
worksheet.Cells[1, 1].Style.Numberformat.Format = format;
c = new CultureInfo("de-DE");
format = $"[$-de]{c.DateTimeFormat.ShortDatePattern} (dddd)";
worksheet.Cells[2, 1].Value = dt;
worksheet.Cells[2, 1].Style.Numberformat.Format = format;
c = new CultureInfo("en-EN");
format = $"[$-en]{c.DateTimeFormat.ShortDatePattern} (dddd)";
worksheet.Cells[3, 1].Value = dt;
worksheet.Cells[3, 1].Style.Numberformat.Format = format;
pck.Save();
}
}
这给出了这个:
我面临的问题是 Excel sheet 的单元格中写入了日期。单元格的格式为自定义格式,例如:
[$-de]dd/mm/yyyy (dddd)
但是只有 (dddd) 部分被处理给我 "Sonntag"(德语中的星期日)。
即使我将自定义格式的文化写成 "de",日期时间格式也不是固定的。有没有办法在不改变日期时间格式(yyyy-mm-dd)的情况下实现以下结果?
Tried Output Expected output
-------- ----------------------- -------------------
[$-fr]yyyy-mm-dd (dddd) => 2019-07-31 (dimanche) 31/7/2019 (dimanche)
[$-de]yyyy-mm-dd (dddd) => 2019-07-31 (Sonntag) 31.7.2019 (Sonntag)
[$-en]yyyy-mm-dd (dddd) => 2019-07-31 (Sunday) 7.31.2019 (Sunday)
假设您的日期从 A1
开始,请尝试在另一个 column/cell 中使用以下公式=TEXT(A1,"mm/dd/yyy (dddd[$-fr])")
希望对您有所帮助!
您可以将文本字符串类型从“/”更改为“.”或者任何你想要的和语言格式通过改变这个元素 [$-fr]
由于您在字符串 (yyyy-mm-dd
) 中指定了确切的数据格式,因此 excel 在打开时必须遵守它。据我所知,excel 没有真正的 "default" 格式与您要查找的内容匹配。如果您打开 Excel 并指定单元格的格式,您可以设置 Culture/Country 但您仍然必须选择格式 - 第一个通常使用 / 作为分隔符。
但是如果您想使用 .NET 中的内容,您可以使用 CultureInfo.DateTimeFormat
来获得我认为您想要的内容:
CultureInfo c;
var dt = new DateTime(2019,7,31);
c = new CultureInfo("fr-FR");
Console.WriteLine($"{c}: {c.DateTimeFormat.ShortDatePattern}");
Console.WriteLine(dt.ToString($"{c.DateTimeFormat.ShortDatePattern} (dddd)", c.DateTimeFormat));
Console.WriteLine();
c = new CultureInfo("de-DE");
Console.WriteLine($"{c}: {c.DateTimeFormat.ShortDatePattern}");
Console.WriteLine(dt.ToString($"{c.DateTimeFormat.ShortDatePattern} (dddd)", c.DateTimeFormat));
Console.WriteLine();
c = new CultureInfo("en-EN");
Console.WriteLine($"{c}: {c.DateTimeFormat.ShortDatePattern}");
Console.WriteLine(dt.ToString($"{c.DateTimeFormat.ShortDatePattern} (dddd)", c.DateTimeFormat));
Console.WriteLine();
会在输出中给你这个:
fr-FR: dd/MM/yyyy
31/07/2019 (mercredi)
de-DE: dd.MM.yyyy
31.07.2019 (Mittwoch)
en-EN: M/d/yyyy
7/31/2019 (Wednesday)
要在 excel 中使用,请执行以下操作:
[TestMethod]
public void Culture_Info_Data_Format_Test()
{
//
var fileInfo = new FileInfo(@"c:\temp\Culture_Info_Data_Format_Test.xlsx");
if (fileInfo.Exists)
fileInfo.Delete();
using (var pck = new ExcelPackage(fileInfo))
{
var dt = new DateTime(2019, 7, 31);
var workbook = pck.Workbook;
var worksheet = workbook.Worksheets.Add("Sheet1");
worksheet.Column(1).Width = 50;
var c = new CultureInfo("fr-FR");
var format = $"[$-fr]{c.DateTimeFormat.ShortDatePattern} (dddd)";
worksheet.Cells[1, 1].Value = dt;
worksheet.Cells[1, 1].Style.Numberformat.Format = format;
c = new CultureInfo("de-DE");
format = $"[$-de]{c.DateTimeFormat.ShortDatePattern} (dddd)";
worksheet.Cells[2, 1].Value = dt;
worksheet.Cells[2, 1].Style.Numberformat.Format = format;
c = new CultureInfo("en-EN");
format = $"[$-en]{c.DateTimeFormat.ShortDatePattern} (dddd)";
worksheet.Cells[3, 1].Value = dt;
worksheet.Cells[3, 1].Style.Numberformat.Format = format;
pck.Save();
}
}
这给出了这个: