更改 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 怎么办?

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

我试过两件事:

  1. 我只是像往常一样更改了单元格的格式。

  2. 在分组中选择了多个项目(使用 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 文档),请参考以下链接之一:

无论您采用何种方法,现在都导航到您的数据透视表 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="&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 sheet 的 OOXML 中很可能有更好的方法来做到这一点。这就是我今天发现的,我想分享我发现的东西,因为我自己找不到已发布的答案。

我们将不胜感激跟进有关该做和不该做的建议。

编码愉快!

在您的原始数据中,将该列的日期设置为文本,并在数据透视表 select 列中将其更改为常规的短日期。它对我有用。