更改 PIVOT 中 GROUPED 日期的日期格式 TABLE
Changing the Date Format for GROUPED dates in a PIVOT TABLE
我在 Excel 2010
工作
假设您的原始数据中有一个合法的日期字段,例如 1/1/2015。然后,您在行标签中使用日期字段创建一个数据透视表 table。
现在假设您想要按月显示结果,因此您右键单击 "Group Field" 和 select 以按月对其进行分组。
现在,您的数据以 Mmm 格式以月为单位显示。您将如何将其更改为 Mmmm 格式?或者,如果您想将其显示为数字怎么办(即 Jan 显示为 1)
对于具有时间戳的日期和按天分组的日期如何。枢轴 table 会将日期显示为 D-Mmm。如果我想要 MM/DD/YYYY 怎么办?
是的,我已经尝试通过右键单击 -> 字段设置 -> 数字格式来更改它。没用。
我试过两件事:
我只是像往常一样更改了单元格的格式。
在分组中选择了多个项目(使用 Control+单击 windows 或 Command+单击 mac)source
ps.: 我指定了如何 select 多个项目,因为它不太直观。
我遇到了同样的问题。我所做的是右键单击要更改枢轴 table 视图的值,然后选择 "Ungroup" 选项。这带回了调节器视图格式。希望对您有所帮助。
我选择了其中一个列标题并单击取消分组。
我的问题是枢轴 table 有 mmm 标题,我想要 m/d/yyyy 对应于我的原始数据。
Baris Sari 的回答部分正确。您必须取消日期分组,这样您就可以设置任何您想要的日期格式。
Select 数据透视表中的所有日期,然后右键单击并 select 取消分组。
然后再次右键单击您的 selection 并点击格式化单元格。打开的 window 中的第一个选项卡与数字相关。
这在 Excel 2016 年和 2010 年有效。
如果您 select 日期被分解的列(在数据透视表内 - 年、季度等)并进行数据取消分组。它将带您进入日期格式。
我刚刚将作为数据透视表 table(原为 dd/mm/yyy hh:mm:ss)的数据源的日期时间字段重新格式化为文本 (ddddd.ttttt) 并且然后当我刷新数据透视表时 table 它以我选择的日期时间格式出现。
自 Excel 2016 年起,无法更改 Excel 自动格式化枢轴 tables 中分组日期的方式。
解决方法是在源数据文件中创建一个具有所需格式的新 field/column 并在数据透视 table.
中使用它
似乎有一个新选项 "Group Field"(标记为“7”,出于某种原因。单击此选项,您将获得月/日/时等单选按钮选项。Select 您的首选项,然后单击“确定”。
希望这对你也有用!
我能够通过操作 Excel 文档的内部 OOXML(Office Open XML) 来解决这个问题。如果您不知道如何打开 excel 文档(以查看其内部组成的 xml 文档),请参考以下链接之一:
“最佳方式”直接使用 Visual Studio 扩展(OOXML 包编辑器)到 open/edit excel 文件:http://www.ericwhite.com/blog/open-xml-installation-center/
或使用“更简单”的基于 Chrome 的扩展(将 Excel 文件拖放到其上):https://chrome.google.com/webstore/detail/ooxml-tools/bjmmjfdegplhkefakjkccocjanekbapn?hl=en(记得在之后下载新文件保存更改)
或“最不建议”的方式
1.) Change your filename from "MyExcelFile.xlsx" to "MyExcelFile.zip"
2.) Unzip the file
3.) Change the format (as explained below)
4.) Zip it all back up and change extension to .xlsx
5.) Warning, This method often corrupts my files, but not always, so I use OOXML Package editor in Visual Studio instead.
无论您采用何种方法,现在都导航到您的数据透视表 table 的“PivotCache”。在我的 'unzipped excel file' 中,文件路径是:Root > xl > pivotCache > pivotCacheDefinition1.xml
我的副本有 800 行 xml 左右,我想它甚至可能更多,但只关注您要重新格式化的部分。 (如果使用 Visual Studio Ctrl+K,Ctrl+D,请确保你美化了你的 xml 所以它不是一长串压缩线)
搜索属性:groupBy="月"
我的样本发现
<cacheField name="Months" numFmtId="0" databaseField="0">
<fieldGroup base="2">
<rangePr groupBy="months" startDate="2019-01-02T00:00:00" endDate="2019-12-27T00:00:00"/>
<groupItems count="14">
<s v="<1/2/2019"/>
<s v="Jan"/>
<s v="Feb"/>
<s v="Mar"/>
<s v="Apr"/>
<s v="May"/>
<s v="Jun"/>
<s v="Jul"/>
<s v="Aug"/>
<s v="Sep"/>
<s v="Oct"/>
<s v="Nov"/>
<s v="Dec"/>
<s v=">12/27/2019"/>
</groupItems>
</fieldGroup>
</cacheField>
</cacheFields>
...您所要做的就是将“Jan”替换为“1”或您想要的每个月的任何字符串表示形式!
更进一步,但仍然回答如何按列格式化组的问题,是格式化 groupBy="days"
结果是
<fieldGroup par="5" base="2">
<rangePr groupBy="days" startDate="2019-01-02T00:00:00" endDate="2019-12-27T00:00:00"/>
<groupItems count="368">
<s v="(blank)"/>
<s v="1-Jan"/>
<s v="2-Jan"/>
<s v="3-Jan"/>...
这个列表一直在继续,准确地说是 368 个元素。 365 天,加上第一个和最后一个元素,它包括 2 月 29 日。如果您尝试格式化按天分组的行,这些是要更改的元素。即:
<s v="1-Jan"/>
例如,您可以将它们更改为中文(或您喜欢的任何内容,您只需要替换 366 个元素)(同样,保留第一个和最后一个元素)。
所以“1-Jan”“2-Jan”可以变成
<s v="1月1日"/>
<s v="1月2日"/>...
您对待这些的方式与我之前几个月展示的方式完全相同。
然而,手工操作日子更乏味,因为您每天都需要一个元素,所以我制作了一个 C# 函数,您可以修改它以快速将元素吐出到文件中(复制并粘贴到您的 .xml)
public void GenerateExcelGroupedDateFormatPivotTableElements()
{
int year = 2019;
var sb = new StringBuilder();
for (int i = 1; i <= 12; i++)
{
var daysInMonth = DateTime.DaysInMonth(year, i);
for (int j = 1; j <= daysInMonth; j++)
{
//Modify template below as you wish, (uses String Interpolation $) and (Verbatim @ symbol)
//Full Month Name: ie January-day
string monthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(i);
sb.AppendLine($@"<s v=""{monthName}-{j}""/>");
//or Chinese sample
//sb.AppendLine($@"<s v=""{i}月{j}日""/>");
}
}
File.WriteAllText("_ExcelPivotTableGroupedDateHelper.txt",sb.ToString());
}
重要的是,如果您使用此功能吐出您的日子,请手动添加 2 月 29 日,如果您粘贴的原始设置中有 2 月 29 日(就像我的那样)。
免责声明,我不是 excel 专家,在 excel sheet 的 OOXML 中很可能有更好的方法来做到这一点。这就是我今天发现的,我想分享我发现的东西,因为我自己找不到已发布的答案。
我们将不胜感激跟进有关该做和不该做的建议。
编码愉快!
在您的原始数据中,将该列的日期设置为文本,并在数据透视表 select 列中将其更改为常规的短日期。它对我有用。
我在 Excel 2010
工作假设您的原始数据中有一个合法的日期字段,例如 1/1/2015。然后,您在行标签中使用日期字段创建一个数据透视表 table。
现在假设您想要按月显示结果,因此您右键单击 "Group Field" 和 select 以按月对其进行分组。
现在,您的数据以 Mmm 格式以月为单位显示。您将如何将其更改为 Mmmm 格式?或者,如果您想将其显示为数字怎么办(即 Jan 显示为 1)
对于具有时间戳的日期和按天分组的日期如何。枢轴 table 会将日期显示为 D-Mmm。如果我想要 MM/DD/YYYY 怎么办?
是的,我已经尝试通过右键单击 -> 字段设置 -> 数字格式来更改它。没用。
我试过两件事:
我只是像往常一样更改了单元格的格式。
在分组中选择了多个项目(使用 Control+单击 windows 或 Command+单击 mac)source
ps.: 我指定了如何 select 多个项目,因为它不太直观。
我遇到了同样的问题。我所做的是右键单击要更改枢轴 table 视图的值,然后选择 "Ungroup" 选项。这带回了调节器视图格式。希望对您有所帮助。
我选择了其中一个列标题并单击取消分组。 我的问题是枢轴 table 有 mmm 标题,我想要 m/d/yyyy 对应于我的原始数据。
Baris Sari 的回答部分正确。您必须取消日期分组,这样您就可以设置任何您想要的日期格式。
Select 数据透视表中的所有日期,然后右键单击并 select 取消分组。 然后再次右键单击您的 selection 并点击格式化单元格。打开的 window 中的第一个选项卡与数字相关。
这在 Excel 2016 年和 2010 年有效。
如果您 select 日期被分解的列(在数据透视表内 - 年、季度等)并进行数据取消分组。它将带您进入日期格式。
我刚刚将作为数据透视表 table(原为 dd/mm/yyy hh:mm:ss)的数据源的日期时间字段重新格式化为文本 (ddddd.ttttt) 并且然后当我刷新数据透视表时 table 它以我选择的日期时间格式出现。
自 Excel 2016 年起,无法更改 Excel 自动格式化枢轴 tables 中分组日期的方式。
解决方法是在源数据文件中创建一个具有所需格式的新 field/column 并在数据透视 table.
中使用它似乎有一个新选项 "Group Field"(标记为“7”,出于某种原因。单击此选项,您将获得月/日/时等单选按钮选项。Select 您的首选项,然后单击“确定”。 希望这对你也有用!
我能够通过操作 Excel 文档的内部 OOXML(Office Open XML) 来解决这个问题。如果您不知道如何打开 excel 文档(以查看其内部组成的 xml 文档),请参考以下链接之一:
“最佳方式”直接使用 Visual Studio 扩展(OOXML 包编辑器)到 open/edit excel 文件:http://www.ericwhite.com/blog/open-xml-installation-center/
或使用“更简单”的基于 Chrome 的扩展(将 Excel 文件拖放到其上):https://chrome.google.com/webstore/detail/ooxml-tools/bjmmjfdegplhkefakjkccocjanekbapn?hl=en(记得在之后下载新文件保存更改)
或“最不建议”的方式
1.) Change your filename from "MyExcelFile.xlsx" to "MyExcelFile.zip" 2.) Unzip the file 3.) Change the format (as explained below) 4.) Zip it all back up and change extension to .xlsx 5.) Warning, This method often corrupts my files, but not always, so I use OOXML Package editor in Visual Studio instead.
无论您采用何种方法,现在都导航到您的数据透视表 table 的“PivotCache”。在我的 'unzipped excel file' 中,文件路径是:Root > xl > pivotCache > pivotCacheDefinition1.xml
我的副本有 800 行 xml 左右,我想它甚至可能更多,但只关注您要重新格式化的部分。 (如果使用 Visual Studio Ctrl+K,Ctrl+D,请确保你美化了你的 xml 所以它不是一长串压缩线)
搜索属性:groupBy="月"
我的样本发现
<cacheField name="Months" numFmtId="0" databaseField="0">
<fieldGroup base="2">
<rangePr groupBy="months" startDate="2019-01-02T00:00:00" endDate="2019-12-27T00:00:00"/>
<groupItems count="14">
<s v="<1/2/2019"/>
<s v="Jan"/>
<s v="Feb"/>
<s v="Mar"/>
<s v="Apr"/>
<s v="May"/>
<s v="Jun"/>
<s v="Jul"/>
<s v="Aug"/>
<s v="Sep"/>
<s v="Oct"/>
<s v="Nov"/>
<s v="Dec"/>
<s v=">12/27/2019"/>
</groupItems>
</fieldGroup>
</cacheField>
</cacheFields>
...您所要做的就是将“Jan”替换为“1”或您想要的每个月的任何字符串表示形式!
更进一步,但仍然回答如何按列格式化组的问题,是格式化 groupBy="days" 结果是
<fieldGroup par="5" base="2">
<rangePr groupBy="days" startDate="2019-01-02T00:00:00" endDate="2019-12-27T00:00:00"/>
<groupItems count="368">
<s v="(blank)"/>
<s v="1-Jan"/>
<s v="2-Jan"/>
<s v="3-Jan"/>...
这个列表一直在继续,准确地说是 368 个元素。 365 天,加上第一个和最后一个元素,它包括 2 月 29 日。如果您尝试格式化按天分组的行,这些是要更改的元素。即:
<s v="1-Jan"/>
例如,您可以将它们更改为中文(或您喜欢的任何内容,您只需要替换 366 个元素)(同样,保留第一个和最后一个元素)。
所以“1-Jan”“2-Jan”可以变成
<s v="1月1日"/>
<s v="1月2日"/>...
您对待这些的方式与我之前几个月展示的方式完全相同。 然而,手工操作日子更乏味,因为您每天都需要一个元素,所以我制作了一个 C# 函数,您可以修改它以快速将元素吐出到文件中(复制并粘贴到您的 .xml)
public void GenerateExcelGroupedDateFormatPivotTableElements()
{
int year = 2019;
var sb = new StringBuilder();
for (int i = 1; i <= 12; i++)
{
var daysInMonth = DateTime.DaysInMonth(year, i);
for (int j = 1; j <= daysInMonth; j++)
{
//Modify template below as you wish, (uses String Interpolation $) and (Verbatim @ symbol)
//Full Month Name: ie January-day
string monthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(i);
sb.AppendLine($@"<s v=""{monthName}-{j}""/>");
//or Chinese sample
//sb.AppendLine($@"<s v=""{i}月{j}日""/>");
}
}
File.WriteAllText("_ExcelPivotTableGroupedDateHelper.txt",sb.ToString());
}
重要的是,如果您使用此功能吐出您的日子,请手动添加 2 月 29 日,如果您粘贴的原始设置中有 2 月 29 日(就像我的那样)。
免责声明,我不是 excel 专家,在 excel sheet 的 OOXML 中很可能有更好的方法来做到这一点。这就是我今天发现的,我想分享我发现的东西,因为我自己找不到已发布的答案。
我们将不胜感激跟进有关该做和不该做的建议。
编码愉快!
在您的原始数据中,将该列的日期设置为文本,并在数据透视表 select 列中将其更改为常规的短日期。它对我有用。