【问题标题】:Preserve Formatting in Power Query在 Power Query 中保留格式
【发布时间】:2019-05-09 12:23:22
【问题描述】:

在 Power Query 中添加新列时,我似乎无法保留以前设置的格式。

  • 源表的值以百分比表示,带两位小数

  • 我导入 PQ 并应用它认为正确的格式:

  • 我将格式更改为我想要的格式:

  • 以日期列为轴

  • 将其加载回工作表

  • 请注意,百分比格式已丢失。

如果我在 Excel 中将此“结果”表格式化为带两位小数的百分比,然后添加“行”(例如,源中具有相同日期但值不同的新条目)并刷新,格式将为保存。

但是如果新条目需要新列(例如新日期),则此新列的格式在加载回 Excel 时将为 @987654337 @ 而不是 Percentage

查询的属性如下。

是否有针对这些问题的 PQ 解决方案(初始格式和“刷新”格式)?还是我必须通过 Worksheet_change 事件诉诸 VBA?

这里是查询的M-Code

let
    Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", type text}, {"Date", type date}, {"Value", Percentage.Type}}),
    #"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Changed Type", {{"Date", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(#"Changed Type", {{"Date", type text}}, "en-US")[Date]), "Date", "Value", List.Sum)
in
    #"Pivoted Column"

【问题讨论】:

    标签: excel powerquery


    【解决方案1】:

    我看到了同样的行为。 Percentage 类型的值在 Power Query 编辑器中显示为百分比,但以 General 数字格式加载到工作表中。

    错误的解决方法

    如果您的情况允许(即,如果您只想引用/显示表格的值而不计算/计算/执行任何数值运算),您可以将百分比值更改为文本。 (由于值的内部表示发生了变化,这并不是一个真正的解决方案和一个非常糟糕的解决方法。)

    let
        Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
        transformed = Table.TransformColumns(Source, {{"ID", Text.From, type text}, {"Date", each DateTime.ToText(_, "M/d/yyyy"), type text}, {"Value", Percentage.From, Percentage.Type}}),
        newHeaders = List.Distinct(transformed[Date]),  
        pivoted = Table.Pivot(transformed, newHeaders, "Date", "Value", List.Sum),
        stringifyPercentageColumns = List.Accumulate(newHeaders, pivoted, (tableState, currentHeader) => Table.TransformColumns(tableState, {{currentHeader, each Text.From(_ * 100) & "%", type text}}) )
    in
        stringifyPercentageColumns
    

    好的解决方法

    正如您所提到的,可能需要通过 VBA 应用数字格式。 QueryTable.AfterRefresh 事件似乎更相关(documentationworked example),但对于这样一个简单的任务需要大量设置代码;所以Worksheet_Change 事件设置起来可能会更快。

    也许其他人可以给你一个实际的解决方案,但我认为问题在于 Excel 没有 Power Query 的Percentage 类型的“默认数字格式”(如果这样的概念甚至存在的话)。所以问题不在于 Power Query,而在于 Excel,但我只是猜测,可能是错误的。


    不相关。您的M 代码似乎包含三个独立的Table.TransformColumnTypes,但我认为您只需要一个(请参阅我的M 代码中的transformed 表达式)。

    【讨论】:

    • 感谢您的意见。到目前为止,VBA 解决方案似乎是不可避免的。不幸的是,如果没有 VBA,这一切都无法完成。而且,正如您所猜测的那样,百分比的文本表示实际上是不可接受的。就多个Table.TransformColumnTypes而言,我对PQ非常缺乏经验。代码是由 UI 生成的,因为它展示了我试图表达的观点,所以我没有尝试清理它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多