Здравствуйте! В сфере таблиц я чайничек, поэтому никак не могу решить сей вопрос.
Предположим, что у нас имеется расписание для обучающихся (Лист1, в прикрепленном файле), требуется сформировать расписание для обучающих (вывести его на Лист2), с выведением кабинетов и временем занятий.
Буду очень благодарен за помощь, спасибо. Есть предположение, что в существующем виде сделать это невозможно (потому что информация о занятиях находится в одной ячейке, вероятнее всего, получится только если заносить все данные в отдельные ячейки: день недели, время занятия, обучающий, кабинет).
Здравствуйте! В сфере таблиц я чайничек, поэтому никак не могу решить сей вопрос.
Предположим, что у нас имеется расписание для обучающихся (Лист1, в прикрепленном файле), требуется сформировать расписание для обучающих (вывести его на Лист2), с выведением кабинетов и временем занятий.
Буду очень благодарен за помощь, спасибо. Есть предположение, что в существующем виде сделать это невозможно (потому что информация о занятиях находится в одной ячейке, вероятнее всего, получится только если заносить все данные в отдельные ячейки: день недели, время занятия, обучающий, кабинет).yukiyui
трудозатраты на реализацию и её эффективность становятся несоизмеримыми с результатом
Честно говоря, я обратного мнения. Стоит отметить, что я единственный, кто задался вопросом автоматизации сих процессов. Написал бота на питоне, который парсит информацию с файла и отправляет её в телеграм. Каждый обучающийся может изучить расписание своей группы, нажав пару кнопок, а сейчас хочу сделать, чтобы каждый обучающий смог просмотреть своё расписание.
Сам основной файл масштабный, десятки листов с расписанием (расписание существует и меняется на протяжении десятка лет).
Поэтому, Сергей, если есть возможность описать как всё реализовать, буду благодарен.
трудозатраты на реализацию и её эффективность становятся несоизмеримыми с результатом
Честно говоря, я обратного мнения. Стоит отметить, что я единственный, кто задался вопросом автоматизации сих процессов. Написал бота на питоне, который парсит информацию с файла и отправляет её в телеграм. Каждый обучающийся может изучить расписание своей группы, нажав пару кнопок, а сейчас хочу сделать, чтобы каждый обучающий смог просмотреть своё расписание.
Сам основной файл масштабный, десятки листов с расписанием (расписание существует и меняется на протяжении десятка лет).
Поэтому, Сергей, если есть возможность описать как всё реализовать, буду благодарен.yukiyui
let Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content], #"Разделить столбец по разделителю" = Table.SplitColumn(Источник, "Группа №1", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv)), #"Разделить столбец по разделителю1" = Table.SplitColumn(#"Разделить столбец по разделителю", "Группа №2", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv)), #"Разделить столбец по разделителю2" = Table.SplitColumn(#"Разделить столбец по разделителю1", "Группа №3", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv)), #"Несвернутые столбцы" = Table.UnpivotOtherColumns(#"Разделить столбец по разделителю2", {}, "Атрибут", "Значение"), #"Строки с примененным фильтром" = Table.SelectRows(#"Несвернутые столбцы", each [Значение] <> null and [Значение] <> ""), #"Извлеченный текст перед разделителем" = Table.TransformColumns(#"Строки с примененным фильтром", {{"Атрибут", each Text.BeforeDelimiter(_, "."), type text}}), #"Условный столбец добавлен" = Table.AddColumn(#"Извлеченный текст перед разделителем", "Пользовательский", each if [Значение] = "Понедельник" then "1/Понедельник" else if [Значение] = "Вторник" then "2/Вторник" else if [Значение] = "Среда" then "3/Среда" else if [Значение] = "Четверг" then "4/Четверг" else if [Значение] = "Пятница" then "5/Пятница" else if [Значение] = "Суббота" then "6/Суббота" else if [Значение] = "Воскресенье" then "7/Воскресенье" else null), #"Заполнение вниз" = Table.FillDown(#"Условный столбец добавлен",{"Пользовательский"}), #"Строки с примененным фильтром1" = Table.SelectRows(#"Заполнение вниз", each not Text.Contains([Значение], "Понедельник") and not Text.Contains([Значение], "Вторник") and not Text.Contains([Значение], "Среда") and not Text.Contains([Значение], "Четверг") and not Text.Contains([Значение], "Пятница") and not Text.Contains([Значение], "Суббота") and not Text.Contains([Значение], "Воскресенье")), #"Добавлен индекс" = Table.AddIndexColumn(#"Строки с примененным фильтром1", "Индекс", 0, 1, Int64.Type), #"Целочисленное деление" = Table.AddColumn(#"Добавлен индекс", "Целочисленное деление", each Number.IntegerDivide([Индекс], 3), Int64.Type), #"Вычисленный остаток от деления" = Table.TransformColumns(#"Целочисленное деление", {{"Индекс", each Number.Mod(_, 3), type number}}), #"Сведенный столбец" = Table.Pivot(Table.TransformColumnTypes(#"Вычисленный остаток от деления", {{"Индекс", type text}}, "ru-RU"), List.Distinct(Table.TransformColumnTypes(#"Вычисленный остаток от деления", {{"Индекс", type text}}, "ru-RU")[Индекс]), "Индекс", "Значение"), #"Сортированные строки" = Table.Sort(#"Сведенный столбец",{{"1", Order.Ascending}, {"Пользовательский", Order.Ascending}, {"0", Order.Ascending}}), #"Удаленные столбцы" = Table.RemoveColumns(#"Сортированные строки",{"Целочисленное деление"}), #"Извлеченный текст после разделителя" = Table.TransformColumns(#"Удаленные столбцы", {{"Пользовательский", each Text.AfterDelimiter(_, "/"), type text}}), #"Переупорядоченные столбцы" = Table.ReorderColumns(#"Извлеченный текст после разделителя",{"1", "Пользовательский", "0", "Атрибут", "2"}), #"Переименованные столбцы" = Table.RenameColumns(#"Переупорядоченные столбцы",{{"1", "ФИО"}, {"Пользовательский", "День недели"}, {"0", "Время"}, {"Атрибут", "Группа"}, {"2", "Кабинет"}}) in #"Переименованные столбцы"
[/vba]
Вот кнопочный вариант PQ [vba]
Код
let Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content], #"Разделить столбец по разделителю" = Table.SplitColumn(Источник, "Группа №1", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv)), #"Разделить столбец по разделителю1" = Table.SplitColumn(#"Разделить столбец по разделителю", "Группа №2", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv)), #"Разделить столбец по разделителю2" = Table.SplitColumn(#"Разделить столбец по разделителю1", "Группа №3", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv)), #"Несвернутые столбцы" = Table.UnpivotOtherColumns(#"Разделить столбец по разделителю2", {}, "Атрибут", "Значение"), #"Строки с примененным фильтром" = Table.SelectRows(#"Несвернутые столбцы", each [Значение] <> null and [Значение] <> ""), #"Извлеченный текст перед разделителем" = Table.TransformColumns(#"Строки с примененным фильтром", {{"Атрибут", each Text.BeforeDelimiter(_, "."), type text}}), #"Условный столбец добавлен" = Table.AddColumn(#"Извлеченный текст перед разделителем", "Пользовательский", each if [Значение] = "Понедельник" then "1/Понедельник" else if [Значение] = "Вторник" then "2/Вторник" else if [Значение] = "Среда" then "3/Среда" else if [Значение] = "Четверг" then "4/Четверг" else if [Значение] = "Пятница" then "5/Пятница" else if [Значение] = "Суббота" then "6/Суббота" else if [Значение] = "Воскресенье" then "7/Воскресенье" else null), #"Заполнение вниз" = Table.FillDown(#"Условный столбец добавлен",{"Пользовательский"}), #"Строки с примененным фильтром1" = Table.SelectRows(#"Заполнение вниз", each not Text.Contains([Значение], "Понедельник") and not Text.Contains([Значение], "Вторник") and not Text.Contains([Значение], "Среда") and not Text.Contains([Значение], "Четверг") and not Text.Contains([Значение], "Пятница") and not Text.Contains([Значение], "Суббота") and not Text.Contains([Значение], "Воскресенье")), #"Добавлен индекс" = Table.AddIndexColumn(#"Строки с примененным фильтром1", "Индекс", 0, 1, Int64.Type), #"Целочисленное деление" = Table.AddColumn(#"Добавлен индекс", "Целочисленное деление", each Number.IntegerDivide([Индекс], 3), Int64.Type), #"Вычисленный остаток от деления" = Table.TransformColumns(#"Целочисленное деление", {{"Индекс", each Number.Mod(_, 3), type number}}), #"Сведенный столбец" = Table.Pivot(Table.TransformColumnTypes(#"Вычисленный остаток от деления", {{"Индекс", type text}}, "ru-RU"), List.Distinct(Table.TransformColumnTypes(#"Вычисленный остаток от деления", {{"Индекс", type text}}, "ru-RU")[Индекс]), "Индекс", "Значение"), #"Сортированные строки" = Table.Sort(#"Сведенный столбец",{{"1", Order.Ascending}, {"Пользовательский", Order.Ascending}, {"0", Order.Ascending}}), #"Удаленные столбцы" = Table.RemoveColumns(#"Сортированные строки",{"Целочисленное деление"}), #"Извлеченный текст после разделителя" = Table.TransformColumns(#"Удаленные столбцы", {{"Пользовательский", each Text.AfterDelimiter(_, "/"), type text}}), #"Переупорядоченные столбцы" = Table.ReorderColumns(#"Извлеченный текст после разделителя",{"1", "Пользовательский", "0", "Атрибут", "2"}), #"Переименованные столбцы" = Table.RenameColumns(#"Переупорядоченные столбцы",{{"1", "ФИО"}, {"Пользовательский", "День недели"}, {"0", "Время"}, {"Атрибут", "Группа"}, {"2", "Кабинет"}}) in #"Переименованные столбцы"