删除特定列右边的所有列

问题描述 投票:1回答:2

我有一个Excel模板文件,其中的列数动态表示工作日的日期。一些用户决定在这些列的右侧添加自己的小计列。我需要一种方法来识别第一个空白列,然后截断该列及其后的所有列。

我以前一直使用以下脚本来删除所有以单词“ Column”开头的列:

// Create a list of columns that start with "Column" and remove them.
Removed_ColumnNum_Columns = Table.RemoveColumns(PreviousStepName, List.Select(Table.ColumnNames(PreviousStepName), each Text.StartsWith(_, "Column") )),

基于能够找到第一列XX列,我想删除它及其后的所有列

enter image description here

powerquery m
2个回答
0
投票

在ColumnXX之后删除列

找到以“ Column”开头的第一列,并删除该列及其后的所有列。这会将XX解析为列索引,因此您需要确保在此步骤之前没有删除列。也就是说,在此步骤中,“ Column35”必须为第35列。

// Find the first ColumnXX column and remove it and all columns to the right. 
ColumnXX = List.Select(Table.ColumnNames(#"Promoted Headers"), each Text.StartsWith(_, "Column")){0}, 
ColumnIndex = Number.FromText(Text.Middle(ColumnXX, 6,4)), 
ColumnListToRemove = List.Range(Table.ColumnNames(#"Promoted Headers"),ColumnIndex-1), 
RemovedTrailingColumns  = Table.RemoveColumns(#"Promoted Headers", ColumnListToRemove),

为了使它更健壮,我希望有一种方法来标识columnXX的列索引而不解析其数字。


0
投票

您可以使用List.PositionOf来获取ColumnIndex而不是解析文本。

我会这样组合:

// [...]
ColumnList = Table.ColumnNames(#"Promoted Headers"),
ColumnXX = List.Select(ColumnList, each Text.StartsWith(_, "Column")){0}, 
ColumnIndex = List.PositionOf(ColumnList, ColumnXX),
ColumnsToKeep = List.FirstN(ColumnList, ColumnIndex),
FinalTable = Table.SelectColumns(#"Promoted Headers", ColumnsToKeep)
© www.soinside.com 2019 - 2024. All rights reserved.