在PIVOT TABLE

时间:2015-08-06 17:48:13

标签: excel excel-2010 pivot-table

我在Excel 2010中工作

假设您的原始数据中包含合法的日期字段,日期为2015年1月1日。然后在行标签中创建一个带有日期字段的数据透视表。

现在假设您希望按月显示结果,因此您右键单击" Group Field"并选择按月分组。

现在,您的数据以Mmm格式显示数月。你会如何改变它的Mmmm格式?或者如果你想将它显示为数字(即Jan显示为1)

对于有时间戳的日期和按天分组的日期怎么样?数据透视表将日期显示为D-Mmm。如果我想要MM / DD / YYYY怎么办?

是的,我已经尝试通过右键单击更改它 - >字段设置 - >数字格式。它没有用。

8 个答案:

答案 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文档),请参考以下链接之一:

无论使用哪种方法,现在都可以导航到数据透视表的“ 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="&lt;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="&gt;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)

我尝试了两件事:

  1. 我刚换了细胞&#39;像往常一样格式化。

    Format Cells

  2. 在分组上选择了多个项目(使用Control +单击Windows或Command +单击Mac)source

    Grouping box image showing two groups of selection: "Auto" with starting and ending dates, and "by" with a list of time division items: seconds, minutes, hours and so on...

  3. ps:我指定了如何选择多个项目,因为它不太直观。

答案 7 :(得分:-2)

我选择了其中一个列标题,然后点击了取消组合。 我的问题是数据透视表有mmm标题,我想要m / d / yyyy对应我的原始数据。