Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сбор данных из нескольких файлов xml - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сбор данных из нескольких файлов xml (Макросы/Sub)
Сбор данных из нескольких файлов xml
StoTisteg Дата: Пятница, 08.06.2018, 12:59 | Сообщение № 21
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
Затем удаляю их ручками
А зачем? Это тоже можно макросу поручить :)


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
Сообщение
Затем удаляю их ручками
А зачем? Это тоже можно макросу поручить :)

Автор - StoTisteg
Дата добавления - 08.06.2018 в 12:59
taratosa Дата: Вторник, 28.06.2022, 05:50 | Сообщение № 22
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 0% ±

2016
SLAVICK, присоединяюсь к благодарности!!!!
 
Ответить
СообщениеSLAVICK, присоединяюсь к благодарности!!!!

Автор - taratosa
Дата добавления - 28.06.2022 в 05:50
antonovakatyapetya Дата: Суббота, 05.08.2023, 09:14 | Сообщение № 23
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

2010
Распакуйте архив.
Положите все свои файлы в папку XML.
Нажмите кнопку на 2-м листе.
Макрос соберет данные на 2-й лист.
Потом можно сделать сводную.

Добрый день, спасибо Вам за такие полезные макросы!
У меня есть вопрос по импорту данных в Exel.
Я собираю информацию из ячеек с временем из файлов .xhf , это тот же xml, только в программе станка он записывается с таким расширением.
В файле есть 6 или 12 колонок. Меня интересует 3,4,5,6 колонки. Все ячейки в колонках открываются как общий формат, из-за чего теряется точность длинного числа в 3 колонке (более 15 цифр) и время в .xhf файле записано в таком виде - 2023-07-14T07:49:57.9947049+03:00, Excel не понимает что это время и тоже формирует ячейки как обычный формат, а нужно время хотя бы с одной десятой секунды.
В общем мне приходится сначала в Notepad ++ переформатировать .xhf файл создавая в каждом стиль с указанием ss:Format="@" для 3 колонки , ss:Format="mm/dd/yyyy hh:mm:s.0" для 5 и 6 , 4 остается с общим форматом. А потом только открываю в Excel и делаю арифметические действия с колонками время, ориентируясь на 3 и 4 колонки (в 3 колонке идентификатор задания он может быть от 17 до 19 цифр, он важен для расчета времени). Пакетной обработки для Notepad++ нет, поэтому приходится делать по одному, а потом по одному также открывать в Excel.
Увидел ваш скрипт который собирает все xml файлы в одну книгу, понял, что можно быстрее получать информацию за определенный период - кинул в папку XML столько файлов, сколько дней я хочу проанализировать , запускаю ваш скрипт (файл), а потом свой скрипт и он считает сразу по всему списку!

У меня к Вам большая просьба, а можно что-то дописать в Ваш скрипт, чтобы автоматически добавить стиль к 3, 5 и 6 колонке? (к 3 - текст) (к 5 и 6 - дата.время). Чтобы мне не запускать сначала для каждого файла Notepad++ с макросом для каждого...

Несколько оригинальных файлов .xhf без стиля за 10,11,12 число, я приложил в архиве "для отчета.zip"
Спасибо!
К сообщению приложен файл: dlja_otcheta.zip (15.2 Kb)


Сообщение отредактировал antonovakatyapetya - Суббота, 05.08.2023, 11:55
 
Ответить
Сообщение
Распакуйте архив.
Положите все свои файлы в папку XML.
Нажмите кнопку на 2-м листе.
Макрос соберет данные на 2-й лист.
Потом можно сделать сводную.

Добрый день, спасибо Вам за такие полезные макросы!
У меня есть вопрос по импорту данных в Exel.
Я собираю информацию из ячеек с временем из файлов .xhf , это тот же xml, только в программе станка он записывается с таким расширением.
В файле есть 6 или 12 колонок. Меня интересует 3,4,5,6 колонки. Все ячейки в колонках открываются как общий формат, из-за чего теряется точность длинного числа в 3 колонке (более 15 цифр) и время в .xhf файле записано в таком виде - 2023-07-14T07:49:57.9947049+03:00, Excel не понимает что это время и тоже формирует ячейки как обычный формат, а нужно время хотя бы с одной десятой секунды.
В общем мне приходится сначала в Notepad ++ переформатировать .xhf файл создавая в каждом стиль с указанием ss:Format="@" для 3 колонки , ss:Format="mm/dd/yyyy hh:mm:s.0" для 5 и 6 , 4 остается с общим форматом. А потом только открываю в Excel и делаю арифметические действия с колонками время, ориентируясь на 3 и 4 колонки (в 3 колонке идентификатор задания он может быть от 17 до 19 цифр, он важен для расчета времени). Пакетной обработки для Notepad++ нет, поэтому приходится делать по одному, а потом по одному также открывать в Excel.
Увидел ваш скрипт который собирает все xml файлы в одну книгу, понял, что можно быстрее получать информацию за определенный период - кинул в папку XML столько файлов, сколько дней я хочу проанализировать , запускаю ваш скрипт (файл), а потом свой скрипт и он считает сразу по всему списку!

У меня к Вам большая просьба, а можно что-то дописать в Ваш скрипт, чтобы автоматически добавить стиль к 3, 5 и 6 колонке? (к 3 - текст) (к 5 и 6 - дата.время). Чтобы мне не запускать сначала для каждого файла Notepad++ с макросом для каждого...

Несколько оригинальных файлов .xhf без стиля за 10,11,12 число, я приложил в архиве "для отчета.zip"
Спасибо!

Автор - antonovakatyapetya
Дата добавления - 05.08.2023 в 09:14
прохожий2019 Дата: Суббота, 05.08.2023, 15:34 | Сообщение № 24
Группа: Проверенные
Ранг: Старожил
Сообщений: 1244
Репутация: 317 ±
Замечаний: 0% ±

365 Beta Channel
могу предложить PQ - в выгрузке специально показал форматом, что все 15 разрядов сохранены (это чуть точнее, чем 0,0001 секунды, точнее экселька не сможет, а на стороне pq можно и последующие преобразования сделать без потери точности)
[vba]
Код
let
    from = Folder.Files(Excel.CurrentWorkbook(){[Name="adres"]}[Content]{0}[Column1])[Content],
    f=(x)=>Xml.Tables(x),
    g=(x)=>[a=Text.Length(Text.SplitAny(x,".+"){1}),
            b=if a=7 then x else Text.Replace(x,"+",Text.PadStart("+",8-a,"0")),
            c=DateTimeZone.FromText(b,[Format="O",Culture="en-US"]),
            d=if x =null then null else c][d],
    tr=List.Transform(from,f),
    tbl=Table.Combine(tr),
    exp = Table.ExpandTableColumn(tbl, "Table", {"CutWorkId", "WorkPhase", "StartTime", "EndTime"}),
    to=Table.TransformColumns(exp,{{"StartTime",g,type nullable datetimezone},{"EndTime",g,type nullable datetimezone}})
in
    to
[/vba]
К сообщению приложен файл: xhf.zip (50.9 Kb)
 
Ответить
Сообщениемогу предложить PQ - в выгрузке специально показал форматом, что все 15 разрядов сохранены (это чуть точнее, чем 0,0001 секунды, точнее экселька не сможет, а на стороне pq можно и последующие преобразования сделать без потери точности)
[vba]
Код
let
    from = Folder.Files(Excel.CurrentWorkbook(){[Name="adres"]}[Content]{0}[Column1])[Content],
    f=(x)=>Xml.Tables(x),
    g=(x)=>[a=Text.Length(Text.SplitAny(x,".+"){1}),
            b=if a=7 then x else Text.Replace(x,"+",Text.PadStart("+",8-a,"0")),
            c=DateTimeZone.FromText(b,[Format="O",Culture="en-US"]),
            d=if x =null then null else c][d],
    tr=List.Transform(from,f),
    tbl=Table.Combine(tr),
    exp = Table.ExpandTableColumn(tbl, "Table", {"CutWorkId", "WorkPhase", "StartTime", "EndTime"}),
    to=Table.TransformColumns(exp,{{"StartTime",g,type nullable datetimezone},{"EndTime",g,type nullable datetimezone}})
in
    to
[/vba]

Автор - прохожий2019
Дата добавления - 05.08.2023 в 15:34
doober Дата: Суббота, 05.08.2023, 16:53 | Сообщение № 25
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Предлагаю макросом
К сообщению приложен файл: kniga1.xlsm (42.6 Kb)


 
Ответить
СообщениеПредлагаю макросом

Автор - doober
Дата добавления - 05.08.2023 в 16:53
antonovakatyapetya Дата: Суббота, 05.08.2023, 17:13 | Сообщение № 26
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

2010
Цитата прохожий2019, 05.08.2023 в 15:34, в сообщении № 24 ()
могу предложить PQ - в выгрузке специально показал форматом, что все 15 разрядов сохранены (это чуть точнее, чем 0,0001 секунды, точнее экселька не сможет, а на стороне pq можно и последующие преобразования сделать без потери точности)


Предлагаю макросом


Большое Вам спасибо! ДА это то что мне нужно, сэкономим уйму времени. Дело в том, что у компьютер управляющего станком, вышел из строя накопитель, привычный для всех файл отчета, который формируется на основе потерянных файлов, стал недоступен. Смог найти только эти небольшие файлы на каждый день. Информации там мало, но есть то что нужно для нашего техотдела. Я механик, ремонтирую оборудование, попросили найти данные, я нашёл, но в сыром виде девочки из техотдела с ними ничего не могут сделать. Начал писать скрипты, долго писал, учился.... Получилось сделать выборку даже, из двух циклов для подсчета времени. А вот как преобразовать ячейку, так не понял.
Еще раз спасибо за помощь!


Сообщение отредактировал antonovakatyapetya - Суббота, 05.08.2023, 17:15
 
Ответить
Сообщение
Цитата прохожий2019, 05.08.2023 в 15:34, в сообщении № 24 ()
могу предложить PQ - в выгрузке специально показал форматом, что все 15 разрядов сохранены (это чуть точнее, чем 0,0001 секунды, точнее экселька не сможет, а на стороне pq можно и последующие преобразования сделать без потери точности)


Предлагаю макросом


Большое Вам спасибо! ДА это то что мне нужно, сэкономим уйму времени. Дело в том, что у компьютер управляющего станком, вышел из строя накопитель, привычный для всех файл отчета, который формируется на основе потерянных файлов, стал недоступен. Смог найти только эти небольшие файлы на каждый день. Информации там мало, но есть то что нужно для нашего техотдела. Я механик, ремонтирую оборудование, попросили найти данные, я нашёл, но в сыром виде девочки из техотдела с ними ничего не могут сделать. Начал писать скрипты, долго писал, учился.... Получилось сделать выборку даже, из двух циклов для подсчета времени. А вот как преобразовать ячейку, так не понял.
Еще раз спасибо за помощь!

Автор - antonovakatyapetya
Дата добавления - 05.08.2023 в 17:13
antonovakatyapetya Дата: Суббота, 05.08.2023, 18:01 | Сообщение № 27
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

2010
doober, У Вас еще удобнее вариант! Выбор папки - очень удобно!
Вы уж извините за навязчивость, а можно еще мой макрос встроить, что я записывал для окончательного подсчета времени по второй кнопке или сразу вместе с Вашим? Теперь он не работает, хотя колонки по счету совпадают. Может переменные совпали? Начальный отсчет для переменной " i " я делал с второй строки, все равно скрипт останавливается на условии поиска значения WorkIdle.

Там много наверное лишнего у меня, не обращайте внимание, я только начал изучать.
У меня в итоге на каждый день получалась вот такая табличка:
, без фильтра по цвету:
Rолонка "D" с окончанием времени не нужна, всё время есть в колонке "C", проверял с отчетами созданными машиной в нормальные дни, всё сходиться с точностью до д.секунд.

К сообщению приложен файл: dlja_rk.png (103.8 Kb) · dlja_rk.bas (2.2 Kb) · 9162461.png (72.3 Kb)


Сообщение отредактировал antonovakatyapetya - Суббота, 05.08.2023, 18:22
 
Ответить
Сообщениеdoober, У Вас еще удобнее вариант! Выбор папки - очень удобно!
Вы уж извините за навязчивость, а можно еще мой макрос встроить, что я записывал для окончательного подсчета времени по второй кнопке или сразу вместе с Вашим? Теперь он не работает, хотя колонки по счету совпадают. Может переменные совпали? Начальный отсчет для переменной " i " я делал с второй строки, все равно скрипт останавливается на условии поиска значения WorkIdle.

Там много наверное лишнего у меня, не обращайте внимание, я только начал изучать.
У меня в итоге на каждый день получалась вот такая табличка:
, без фильтра по цвету:
Rолонка "D" с окончанием времени не нужна, всё время есть в колонке "C", проверял с отчетами созданными машиной в нормальные дни, всё сходиться с точностью до д.секунд.


Автор - antonovakatyapetya
Дата добавления - 05.08.2023 в 18:01
прохожий2019 Дата: Суббота, 05.08.2023, 18:24 | Сообщение № 28
Группа: Проверенные
Ранг: Старожил
Сообщений: 1244
Репутация: 317 ±
Замечаний: 0% ±

365 Beta Channel
мало ли, пригодится
К сообщению приложен файл: xhf.xlsx (48.9 Kb)
 
Ответить
Сообщениемало ли, пригодится

Автор - прохожий2019
Дата добавления - 05.08.2023 в 18:24
antonovakatyapetya Дата: Суббота, 05.08.2023, 18:59 | Сообщение № 29
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

2010
Цитата прохожий2019, 05.08.2023 в 18:24, в сообщении № 28 ()
К сообщению приложен файл: xhf.xlsx (48.9 Kb)

Ок! У меня там определенный расчет есть. = таблица с именем "Macchina" в xml -игнорируется, поэтому такие строчки где есть "Macchina" нужно удалить. Нужно также удалить все строки где попадаются пустые ячейки в колонке "CutWorkId" или "WorkPhase" или "StartTime". Это сбой или приостановка работы. Работа всегда начинается с маркера "WorkIdle".
Время активации маркера есть время начала работы что мне нужно подсчитать. Вот краткий макрос для определения времени:

Условие поиска такое:
While ((Cells(k, "B") = "WorkIdle") Or (Cells(k, "B") = "Queue") Or (Cells(k, "B") = "Collimation")) And (id = Cells(k, "A"))
k = k + 1
цикл перебирается вниз до тех пор пока не станет ложным это условие, это значит переменная "k минус 1" будет означать номер строки окончания работы, потом идет вычитание конца работы и начала с записью и так далее до конца вниз.

Так я вычислил время, использую нормальный отчет сформированный автоматически, смотрел какое время там и искал что из чего вычесть, что бы получилось также.
Файл автоматического расчёта времени (интересует только последняя колонка"Cut time elapsed" прилагаю, можете сверить если любопытно.
К сообщению приложен файл: avtomaticheskij_otchet_za_12_c.xlsx (12.5 Kb)
 
Ответить
Сообщение
Цитата прохожий2019, 05.08.2023 в 18:24, в сообщении № 28 ()
К сообщению приложен файл: xhf.xlsx (48.9 Kb)

Ок! У меня там определенный расчет есть. = таблица с именем "Macchina" в xml -игнорируется, поэтому такие строчки где есть "Macchina" нужно удалить. Нужно также удалить все строки где попадаются пустые ячейки в колонке "CutWorkId" или "WorkPhase" или "StartTime". Это сбой или приостановка работы. Работа всегда начинается с маркера "WorkIdle".
Время активации маркера есть время начала работы что мне нужно подсчитать. Вот краткий макрос для определения времени:

Условие поиска такое:
While ((Cells(k, "B") = "WorkIdle") Or (Cells(k, "B") = "Queue") Or (Cells(k, "B") = "Collimation")) And (id = Cells(k, "A"))
k = k + 1
цикл перебирается вниз до тех пор пока не станет ложным это условие, это значит переменная "k минус 1" будет означать номер строки окончания работы, потом идет вычитание конца работы и начала с записью и так далее до конца вниз.

Так я вычислил время, использую нормальный отчет сформированный автоматически, смотрел какое время там и искал что из чего вычесть, что бы получилось также.
Файл автоматического расчёта времени (интересует только последняя колонка"Cut time elapsed" прилагаю, можете сверить если любопытно.

Автор - antonovakatyapetya
Дата добавления - 05.08.2023 в 18:59
doober Дата: Суббота, 05.08.2023, 21:48 | Сообщение № 30
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Я бы сделал немного по другому, но не лезу в ваш код.
Так , как Вы в начале пути , хочу дать совет.
Используйте полный путь к ячейкам, указывая родителей.
У ячейки всегда есть лист
К сообщению приложен файл: 5099249.xlsm (26.8 Kb)




Сообщение отредактировал doober - Суббота, 05.08.2023, 21:52
 
Ответить
СообщениеЯ бы сделал немного по другому, но не лезу в ваш код.
Так , как Вы в начале пути , хочу дать совет.
Используйте полный путь к ячейкам, указывая родителей.
У ячейки всегда есть лист

Автор - doober
Дата добавления - 05.08.2023 в 21:48
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сбор данных из нескольких файлов xml (Макросы/Sub)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!