Страницы: 1
RSS
Сбор данных с разных листов в плоскую таблицу
 
Коллеги, добрый день!

Производство ведет учет в Excel в формате во вложении, новый день - новый лист. Само собой никто не знал как они и что ведут, но сейчас встал вопрос аналитики их данных, но я не знаю как это обработать. Помогите!
 
Цитата
Finswimmer написал: новый день - новый лист
Ошибка от незнания. Если аналитика - то в объединеных данных.
 
vikttur, не понял Вас.
Таблицу вел не я, то что она ведется не в 1С я понятия не имел. Само собой если бы я был в курсе, то формат был бы другой. Сейчас вопрос как обработать то что уже сделано?
 
Цитата
Finswimmer написал: новый день - новый лист
И на каждом листе такая вакханалия?
Согласие есть продукт при полном непротивлении сторон
 
Sanja,Да, но они добавляются копированием,
Т.е. структура на всех листах одинаковая
Изменено: Finswimmer - 18.06.2019 15:00:11
 
А что непонятного. Объединить даные в одну таблицу. И уже ее анализировать.
Второй вариант - макросом собирать данные. Но такая обработка сложнее.
 
Цитата
Finswimmer написал: Помогите!
А в чем помочь? С такими исходными данными, как мне кажется, вручную будет быстрее всего это сделать.  
Согласие есть продукт при полном непротивлении сторон
 
Ну вот как такое теперь развидеть?!
В PQ разобрать эту шляпу в принципе можно. Вот только нету в примере вида той таблицы, которую хочет получить ТС на выходе. Покажите сколько строк должно получиться из одного паспорта и откуда какие данные попадают в каждую строку? А то глазки съезжают в кучу и хотят убежать.
Вот горшок пустой, он предмет простой...
 
Глянул файл. Да уж...
Макрос. и не 15 минут на написание. Finswimmer, пора подумать о разделе Работа. Или силой воли закрепить глазки на нужных местах, засучить рукава и... )
 
PooHkrd, Добавил на отдельный лист таблицу со ссылками на ячейку на примере 1 варки
 
Цитата
Finswimmer написал:
Сбор данных с разных листов в плоскую таблицу
Это вот так, по вашему, выглядит плоска таблица?  :D
Вот горшок пустой, он предмет простой...
 
PooHkrd,Не понял вопроса?
 
Finswimmer, да не суть, формально можно обозвать и плоской, но анализировать в таком виде, лично мне, не очень удобно. К такому виду привести можно. Посмотрю чуть позже. Сегодня, боюсь, уже не успею.
Вот горшок пустой, он предмет простой...
 
PooHkrd,Да мне привести в вид чтобы потом можно было сводной вертеть
 
формулы
надеюсь, не отменяет решение в PQ
Изменено: artyrH - 18.06.2019 16:29:54
 
Поддержим отечественных производителей сыра макросом:
 
Цитата
artyrH написал:
надеюсь, не отменяет решение в PQ
Не отменяет, но там ничего сложного, мутор один:
1. изолировать в отдельные таблицы паспорта
2. потом сделать функцию, которая из каждого паспорта понадергает нужные куски и соберет из них запись
3. собрать из записей таблицу для одного листа
4. повторить предыдущие пункты в цикле для каждого листа,
Просто времени нет на мутор этот - работы навалилсоь.
Вот горшок пустой, он предмет простой...
 
Finswimmer, ороче говоря, такой вот незамысловатый запрос, я сформировал вам только те столбцы, которые нужно было вытаскивать напрямую из листа, расчетные можете сделать самостоятельно, это очень скучно.
Код
let
    Source = Table.Combine( Excel.Workbook(File.Contents("E:\СЫр.xlsx"), null, true)[Data] ),
    Combine = Table.SelectColumns(Source,{"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10"}) & Table.Skip( Table.DemoteHeaders( Table.SelectColumns(Source,{"Column12", "Column13", "Column14", "Column15", "Column16", "Column17", "Column18", "Column19", "Column20", "Column21"}) ), 1 ),
    AddedIndex = Table.AddIndexColumn(Combine, "Индекс", 1, 1),
    GroupIndex = Table.AddColumn(AddedIndex, "Пользовательская", each if Text.StartsWith( Text.Combine({[Column3], ""}), "Паспорт варки сыра") then [Индекс] else null),
    FilledDown = Table.FillDown(GroupIndex,{"Пользовательская"}),
    FilteredRows = Table.SelectRows(FilledDown, each ([Пользовательская] <> null)),
    Isolation = Table.Group(FilteredRows, {"Пользовательская"}, {{"Tab", each Table.FromColumns( { {_{2}[Column3]}, {_{1}[Column3]}, {_{32}[Column4]}, {_{32}[Column5]}, {_{7}[Column5]}, {_{13}[Column5]}, {_{13}[Column4]}, {_{13}[Column5]}, {_{16}[Column5]}, {_{16}[Column6]}, {_{16}[Column7]}, {_{16}[Column8]}, {_{16}[Column9]} }, List.FirstN( Table.ColumnNames(Шаблон), 13) ), type table}}),
    Custom1 = Table.Combine( Isolation[Tab] )
in
    Custom1

Ваш исходник пришлось подправить - в том виде как вы его выложили, там зачем-то отформатированы вообще все ячейки листа, из-за этого в диапазон UsedRange попадает очень много ячеек и запрос неистово тупит.
Запрос выполняет вашу задачу полностью: лезет в файл собирает в кучу данные из всех листов и вытаскивает из паспортов нужные циферки по нужным столбцам. К сожалению если все ваши исходники отформатированы так же то применить сие творение вы не сможете.
Вот горшок пустой, он предмет простой...
 
Спасибо большое!
 
Цитата
Finswimmer написал:
Спасибо большое
почву подготавливает для следующей темы ;)  
 
artyrH,не, все еще перевариваю это решение, и чтобы не показаться невежливым поблагодарил
 
Finswimmer, что именно перевариваете? В каком месте не понятно?
Вот горшок пустой, он предмет простой...
 
Finswimmer, и вправду, что именно перевариваете? В каком месте не понятно?
 
artyrH,ошибка вылезла, пока победить не получается
Изменено: Finswimmer - 25.06.2019 16:44:38
 
Finswimmer, нет у меня никакой ошибки
 
Finswimmer, на каком шаге? И вы делаете прямо по моему коду? или творчески его преобразовали? Единственное место в котором может такое вылезти, это где используется Text.Combine. Подозреваю что у вас в начале запроса сработало автотипизирование, вот и ошибка вылезла.
В пятой строке моего кода из поста №18 напишите так:
Код
if Text.StartsWith( Text.Combine({Text.From([Column3]), ""}), "Паспорт варки сыра") then [Индекс] else null

По идее должно помочь.
Изменено: PooHkrd - 25.06.2019 17:08:15
Вот горшок пустой, он предмет простой...
 
PooHkrd, да, тут и возникает
Теперь другая ошибка на том же шаге
Код
DataFormat.Error: Недопустимое значение ячейки "#NAME?".
Изменено: Finswimmer - 25.06.2019 17:28:10
 
Да ядрена кочерыжка! Что там у вас за исходники? Это значит что в ячейках листа исходника есть формулы, которые выдают ошибку "#ИМЯ?"
Попробуйте так:
Код
= Text.Combine({try Text.From([Column3]) otherwise null, ""})
Вот горшок пустой, он предмет простой...
Страницы: 1
Наверх