我在Excel 2010中工作
假设您的原始数据中包含合法的日期字段,日期为2015年1月1日。然后在行标签中创建一个带有日期字段的数据透视表。
现在假设您希望按月显示结果,因此您右键单击" Group Field"并选择按月分组。
现在,您的数据以Mmm格式显示数月。你会如何改变它的Mmmm格式?或者如果你想将它显示为数字(即Jan显示为1)
对于有时间戳的日期和按天分组的日期怎么样?数据透视表将日期显示为D-Mmm。如果我想要MM / DD / YYYY怎么办?
是的,我已经尝试通过右键单击更改它 - >字段设置 - >数字格式。它没有用。
答案 0 :(得分:4)
自Excel 2016起,无法更改Excel自动格式化数据透视表中分组日期的方式。
解决方法是在源数据文件中使用所需格式创建一个新字段/列,并在数据透视表中使用该字段/列。
答案 1 :(得分:2)
如果选择日期分解的列(在枢轴内 - 年,季度等)并进行数据取消组合。它会让你达到日期格式。
答案 2 :(得分:0)
Baris Sari的回答是部分正确的。您必须取消组合日期,然后允许您设置所需的任何日期格式。
选择数据透视表中的所有日期,然后右键单击并选择取消组合。 然后再次右键单击您的选择并单击“设置单元格格式”打开的窗口中的第一个选项卡与数字相关。
这适用于Excel 2016和2010。
答案 3 :(得分:0)
我刚刚将日期时间字段重新格式化为数据透视表(dd / mm / yyy hh:mm:ss)的数据源到文本(ddddd.ttttt),然后当我刷新数据透视表时以我选择的日期时间格式显示。
答案 4 :(得分:0)
由于某种原因,似乎有一个新的选项“ Group Field”(组字段)(标记为“ 7”)。单击此按钮,您会获得Month / Day / hour等的单选按钮选项。选择您的首选项,然后单击OK。 希望这也对您有用!
答案 5 :(得分:0)
我能够通过处理Excel文档的内部OOXML(Office Open XML)来解决此问题。如果您不知道如何打开excel文档(要查看其内部组成的xml文档),请参考以下链接之一:
“最佳方式”使用Visual Studio扩展(OOXML程序包编辑器)直接打开/编辑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.
无论使用哪种方法,现在都可以导航到数据透视表的“ PivotCache”。在我的“解压缩的excel文件”中,文件路径为:根> xl> ivotCache> ivotCacheDefinition1.xml
我的副本有800行左右的xml,我想它甚至可能比这更多,但只集中在要重新格式化的部分上。 (如果使用Visual Studio Ctrl + K,Ctrl + D,请确保您对xml进行了美化,因此它不是长的精简行)
搜索属性:groupBy =“ months”
我的样本发现
<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表的OOXML中可能有更好的方法来做到这一点。这就是我今天发现的,并认为我会分享发现的内容,因为我自己找不到发布的答案。
按照做与不做的建议,将不胜感激。
祝您编程愉快!
答案 6 :(得分:-2)
我尝试了两件事:
我刚换了细胞&#39;像往常一样格式化。
在分组上选择了多个项目(使用Control +单击Windows或Command +单击Mac)source
ps:我指定了如何选择多个项目,因为它不太直观。
答案 7 :(得分:-2)
我选择了其中一个列标题,然后点击了取消组合。 我的问题是数据透视表有mmm标题,我想要m / d / yyyy对应我的原始数据。