Excel 保留Power查询中的格式

Excel 保留Power查询中的格式,excel,powerquery,Excel,Powerquery,在Power查询中添加新列时,我似乎无法保留以前设置的格式 源表的值为带两位小数的百分比 我导入PQ并应用其认为正确的格式: 我将格式更改为我想要的格式: 以日期列为轴心 将其加载回工作表 请注意,百分比格式已丢失 如果我在Excel中将此“结果”表格式化为带两个小数的百分比,然后添加“行”(例如,源中的一个新条目具有相同的日期但具有不同的值)并刷新,则格式将保留 但是如果新条目需要一个新列(例如新日期),则此新列在加载回Excel时的格式将是常规,而不是百分

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

  • 源表的值为带两位小数的百分比

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

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

  • 以日期列为轴心

  • 将其加载回工作表

  • 请注意,百分比格式已丢失
如果我在Excel中将此“结果”表格式化为带两个小数的百分比,然后添加“行”(例如,源中的一个新条目具有相同的日期但具有不同的值)并刷新,则格式将保留

但是如果新条目需要一个新列(例如新日期),则此新列在加载回Excel时的格式将是
常规
,而不是
百分比

查询的属性如下所示

是否有针对这些问题的PQ解决方案(初始格式和“刷新”格式)?或者我必须借助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"

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

糟糕的解决方法

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

好的解决方法

正如您所提到的,可能需要通过VBA应用数字格式<代码>查询表。AfterRefresh事件似乎更相关(和),但对于这样一个简单的任务,需要大量的设置代码;所以
工作表\u Change
事件的设置可能更快

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



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

谢谢你的想法。到目前为止,VBA解决方案似乎是不可避免的。不幸的是,没有VBA,这一切都无法完成。而且,正如您所猜测的,百分比的文本表示法实际上是不可接受的。至于多个
表.TransformColumnTypes
,我对PQ非常缺乏经验。代码是由UI生成的,因为它演示了我试图表达的观点,所以我没有尝试清理它。
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