【问题标题】:How can I get the members of a PivotTable column field to display in natural order, rather than alphabetically?如何让数据透视表列字段的成员按自然顺序显示,而不是按字母顺序显示?
【发布时间】:2016-10-14 18:54:09
【问题描述】:

我被教导如何将一个日期字符串值从我想要的(“Sep 2015”、“Oct 2015”等)转换为 Excel 认为应该的值(“15-Sep” , "15-Oct" 等)here.

当它显示“糟糕”时,列至少以正确的顺序显示(“2015-Sep”,然后是“2015-Oct”)。不过,现在它们是“Sep 15”和“Oct 15”,但它们的显示顺序不符合“自然”顺序和字母顺序(“Oct 15”后跟“Sep 15”)。

这是太典型的场景(在软件开发中尤其明显),解决一个问题导致另一个问题落后于丑陋的后方。

这就是我创建数据透视表的“月份”部分的方式:

var monthField = pvt.PivotFields("MonthYr");
monthField.Orientation = XlPivotFieldOrientation.xlColumnField;

修复显示格式问题前:

修复显示格式问题后(“15-Sep”现在是“Sep 15”等,但是月份现在乱序了):

可以这么说吗?如果有,怎么做?

【问题讨论】:

  • 只是一个建议,您可能只想将列标签单元格的“数字格式”更改为您想要的类型“mmm yy”,而不是在创建数据透视表之前将日期转换为字符串, excel 无法识别为日期并尝试按字母顺序排序。然后你可以让它按正确的时间顺序排序。
  • 那是因为excel中的values 201509201510对应的是9/16/2451 i> 和 9/17/2451。 Excel 像浮点数一样存储日期,整数代表天数,分数代表时间。尝试使用 =DATE(year,month,day) 将您的字符串转换为日期值或阅读这篇关于如何在 VBA 中进行操作的文章 msdn.microsoft.com/en-us/library/aa227484(v=vs.60).aspx 您希望将数据转换为真实日期数据,否则excel不会理解如何按时间顺序排序。在构建数据透视表之前,您需要将其设置为日期格式,然后根据需要格式化列。
  • 例如,42248 = 9/1/2015... 而 42278 = 10/1/2015。
  • Excel 可能很痛苦,但我喜欢 excel,你几乎可以用它做任何事情,而且它给了我工作保障,因为其他人都来找我解决 excel 问题 :) 顺便说一句,问题您面临的问题很常见...您希望显示月/年并按其排序,但通常在您完成分析(构建数据透视表)工作之前,您不应该担心格式/显示/标签问题。由于您在构建数据透视表之前转换了它们,因此 excel 不再知道它是一个日期。但如果你将它们转换为 excel 日期类型,那么你可以配置它们在构建表格后的显示方式。
  • 这可能有助于解决您的 C# 问题:msdn.microsoft.com/en-us/library/cc165448.aspx string date = "01/08/2008"; DateTime dt = Convert.ToDateTime(date);

标签: excel pivot-table excel-interop date-formatting


【解决方案1】:

通过阅读 cmets,听起来您需要将 C# 日期转换为 excel 日期。在第二条评论中,您提到您能够在 Excel 工作表上获取值“201509”和“201510”。

我建议您使用LEFT()RIGHT() 函数将年份和月份分开,然后使用DATE() 函数获取2015 年9 月1 日和2015 年10 月1 日的Excel 序列号。

这是我想到的步骤的屏幕截图(万圣节快乐!):

最后,您现在可以使用公式monthField.NumberFormat = "MMM yy" 格式化序列号。 Excel 将意识到这是一个日期并按时间顺序对其进行排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    相关资源
    最近更新 更多