
Описание
В этом уроке вы узнаете как выполнить множественную замену текста в Power Query.
В наших данных есть такой столбец:
Компания |
Открытое акционерное общество Санаторий "Красная Талка" |
Открытое акционерное общество фирма "Геленджик-Отель" |
Закрытое акционерное общество «НЕВА ИНТЕРНЕЙШЕНЕЛ» |
Закрытое акционерное общество пансионат "Приветливый берег" |
Закрытое акционерное общество лечебно-оздоровительный комплекс "Солнечная" |
Закрытое акционерное общество "Санаторий "Ейск" |
Закрытое акционерное общество "Санаторий "Предгорье Кавказа" |
Нам нужно сделать такие замены:
Найти | Заменить |
открытое акционерное общество | ОАО |
закрытое акционерное общество | ЗАО |
индивидуальный предприниматель | ИП |
общество с ограниченной ответственностью | ООО |
" | « |
« | « |
» | « |
& | & |
акционерное общество | АО |
образовательный фонд | ОФ |
Решение
Для решения понадобится создать 2 таблицы: таблицу замен и таблицу изменения propercase на uppercase.
Найти | Заменить |
Оао | ОАО |
Зао | ЗАО |
Ип | ИП |
Ооо | ООО |
Ао | АО |
Нао | НАО |
Оф | ОФ |
Примененные функции
- Table.Buffer
- Table.SelectColumns
- Table.AddColumn
- List.Accumulate
- List.Positions
- Text.Lower
- Text.Proper
- Table.TransformColumns
- Table.ReplaceValue
- Text.Replace
- Replacer.ReplaceText
Код
Первая таблица замен:
let
source = Table.Buffer(
Excel.CurrentWorkbook(){[Name = "Замена_1"]}[Content]
)
in
source
Вторая таблица замен:
let
source = Table.Buffer(
Excel.CurrentWorkbook(){[Name = "Замена_2"]}[Content]
)
in
source
Выполняем замену:
let
source = Excel.CurrentWorkbook(){[Name = "Гостиницы"]}[Content],
cols_select = Table.SelectColumns(source, {"Компания"}),
col_custom = Table.AddColumn(
cols_select,
"Пользовательская",
each List.Accumulate(
List.Positions(Замена_1[Найти]),
Text.Lower([Компания]),
(state, current) =>
Text.Replace(
state,
Замена_1[Найти]{current},
Замена_1[Заменить]{current}
)
)
),
col_transform = Table.TransformColumns(
col_custom,
{{"Пользовательская", Text.Proper, type text}}
),
col_replace_value = Table.ReplaceValue(
col_transform,
each [Пользовательская],
each List.Accumulate(
List.Positions(Замена_2[Найти]),
[Пользовательская],
(state, current) =>
Text.Replace(
state,
Замена_2[Найти]{current},
Замена_2[Заменить]{current}
)
),
Replacer.ReplaceText,
{"Пользовательская"}
)
in
col_replace_value