在Power Query中添加新列后,我似乎无法保留以前设置的格式。
如果我将Excel中的“结果”表格式化为带有两位小数的百分比,然后添加“行”(例如,源中具有相同日期但值不同的新条目)并刷新,则格式将为保存。
但是但是,如果新条目需要一个新列(例如新日期),则该新列的格式在加载回Excel时将为{{ 1}},而不是General
。
查询的属性如下。
是否有针对这些问题的PQ解决方案(初始格式和“刷新”格式)?还是我必须通过Worksheet_change事件诉诸VBA?
以下是查询的Percentage
:
M-Code
答案 0 :(得分:0)
我看到了相同的行为。类型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
事件似乎更相关(documentation和worked example),但是对于这样一个简单的任务,需要大量的设置代码;因此Worksheet_Change
事件的设置可能会更快。
也许其他人可以为您提供实际的解决方案,但是我认为问题在于Excel对Power Query的Percentage
类型没有“默认数字格式”(如果甚至存在这样的概念)。因此问题不是Power Query而是Excel,但我只是在猜测,可能是错误的。
不相关。您的M
代码似乎包含三个单独的Table.TransformColumnTypes
,但是我认为您只需要一个(请参见我的transformed
代码中的M
表达式)。