Страницы: 1
RSS
Странный формат даты и время, Как преобразовать обратоно из power query?
 
Всем привет. Есть исходный файл, скачиваемый из одной программы и загружаемый в другую. Данный файл необходимо обработать, я это делаю в power query, и надо загрузить в другую программу. После обработки, дата и время становится датой и временем и, соответственно, загрузчик файл не принимает. Как мне вернуть формат назад? два нуля в часах и общий формат
 
В Вашем примере данные До обработки или После? Какой результат должен быть?
Если Вам нужно дату как Текст преобразовать в дату как Дата, то лечится так (один из вариантов):
В любую пустую ячейку вписываете 1 (единицу) - копируете ее - выделяете диапазон с псевдодатами - ПКМ Специальная вставка - Операция Умножить - Ок. Настраиваете нужный формат
Согласие есть продукт при полном непротивлении сторон
 
diman27
Цитата
Странный формат даты и время,
Он совсем не странный а текстовый. Один из вариантов лечения описал Sanja
 
Цитата
написал:
В любую пустую ячейку вписываете 1 (единицу)
совершенно необязательно что-то куда-то вписывать :) копируем любую пустую ячейку -выделяем ячейки с "датами" -правая кнопка мыши -Специальная вставка -Операция "Сложить" :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
diman27 написал:
я это делаю в power query,

может быть такой способ подойдёт
Код
cols_with_dates = {"Начало", "Окончание", "DateTo", "DateFromF", "DateToF", "OwnBirthday", "JudDate", "DecisionDate", "ExecDocDate"},
format_dates = Table.TransformColumnTypes(table, List.Transform(cols_with_dates, (x)=> {x, Date.Type}))
Изменено: nilske - 22.02.2024 12:24:36 (добавил пример)
 
Цитата
написал:
В Вашем примере данные До обработки или После? Какой результат должен быть?
В примере исходник, он загружается в power query, обрабатывается и должен, обработанный, быть в таком же виде и формате
 
В PQ не силен, но думаю, нужно как-то вручную указывать тип данных при обработке.
Как работать с типами данных в Power Query (Способ 2)
Согласие есть продукт при полном непротивлении сторон
 
Цитата
diman27 написал:
В примере исходник
вот оно как, так бы и пояснили сразу
всё остальное значит лишь в планах
Обычно к вопросу прикладывают файл с неустраивающим результатом, с указанием что именно не так и как должно быть.
 
Я приложил файл исходник, таким должен быть формат на выходе в power query. Как вернуть исходный формат я не знаю, и прошу помощи
 
Код
DateTime.ToText(datetime_value, [Format = "dd.MM.yyyy HH:mm:ss"])
Пришелец-прораб.
 
Цитата
написал:
DateTime.ToText(datetime_value, [Format = "dd.MM.yyyy HH:mm:ss"])
А можно более развернутый ответ? Не могу применить формулу, ошибку выдает
 
Цитата
diman27 написал:
А можно более развернутый ответ?
а можно посмотреть на кусочек ваших данных с кодом, который вы применяете и который дает ошибку? Может тогда станет понятно что вам надо на самом деле.
Пришелец-прораб.
 
Цитата
AlienSx написал:
а можно посмотреть на кусочек ваших данных с кодом
Сейчас подготовлю файлы
Изменено: diman27 - 27.02.2024 10:40:00
 
Вот примеры файлов. В исходнике все данные сохранены в текстовом ормате ( все цифровые значения) слева, у меня получается, что даты, время и номер сохраняются в числовом формате (справа).
В документе есть формулы, форматы на листе поменять не могу, выгружаю на отдельный лист макросом.
Подскажите, как можно, после вычислений преобразовать все в текст и выгрузить на отдельный?
Код
Sub convert_and_copy()
    ' Объявляем переменные
    Dim wbSource As Workbook
    Dim wsSource As Worksheet
    Dim rngSource As Range
    Dim wbTarget As Workbook
    Dim ws As Worksheet
    Dim rng As Range
    Dim cell As Range
    
    ' Устанавливаем исходный файл и лист
    Set wbSource = ThisWorkbook
    Set wsSource = wbSource.Sheets("Лист6") ' Замените на имя вашего листа
    Set ws = ThisWorkbook.Sheets("Лист6") 'Замените на имя вашего листа
    Set rng = ws.Range("G2:H19000") 'Замените на нужный вам диапазон

    For Each cell In rng
        cell.NumberFormat = "dd.mm.yyyy HH:mm:ss" 'Замените формат даты и времени на желаемый
                cell.Value = cell.Value
    Next cell
    Set rng = ws.Range("I2:I19000") 'Замените на нужный вам диапазон

    For Each cell In rng
        cell.NumberFormat = "HH:mm:ss" 'Замените формат времени на желаемый
                cell.Value = cell.Value
    Next cell
    
    ' Выделяем диапазон ячеек, который нужно скопировать
    Set rngSource = wsSource.Range("B1:O19000") ' Выделяем диапазон
    ' Создаем новый файл Excel
    Set wbTarget = Workbooks.Add
    ' Копируем исходный диапазон в новый файл
    rngSource.Copy Destination:=wbTarget.Sheets(1).Range("A10")
   
End Sub
 
diman27, зачем нам код VBA (gpt деланный, судя по всему)? Ладно, если я правильно понял задачу, то вам надо преобразовать данные из типа datetime в тип text с соответствующим форматом. Я применил код на M к столбцам Начало и Окончание
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    f = (x) => DateTime.ToText(x, [Format = "dd.MM.yyyy HH:mm:ss"]),
    z = Table.TransformColumns(Source, {{"Начало", f}, {"Окончание", f}})
in
    z

а лучше будет отменить автоматическое определение типа данных в колонках. Тогда ваш изначальный текст им и останется.
Изменено: AlienSx - 27.02.2024 21:42:56
Пришелец-прораб.
 
diman27, ну хорошо. Дата и время вам, допустим, при обработке нужны - это понятно. В программу вам надо отдавать таблицу с текстом определенного формата - тоже понятно. Чем не устраивает моя таблица "стало" с тестовыми полями Начало и Окончание?
Пришелец-прораб.
 
Цитата
написал:
Чем не устраивает моя таблица "стало" с тестовыми полями Начало и Окончание?
Устраивает полностью, только как мне применить его в моем файле после обработки? А почему формат в столбце "Прод-ть" изменился?
Изменено: diman27 - 28.02.2024 17:04:40
 
Цитата
diman27 написал:
как мне применить его в моем файле после обработки?
сделайте новый запрос (пустой), поместите туда мой код, заменив в нем
Код
Excel.CurrentWorkbook(){[Name="Table1"]}[Content]

именем вашего запроса. Мы начинаем говорить об элементарных вещах. Пройдите какой-нибудь видео курс, коих как грязи в интернете.
Цитата
diman27 написал:
А почему формат в столбце "Прод-ть" изменился?
потому, что в вашей таблице это число, отформатированное как hh:mm:ss. Но это все равно число. Найдите на сайте и почитайте статью про то как Excel работает с датами и временем. PQ распознал это как число и при выгрузке на лист показал его. Если надо его представить в каком-то другом виде, то надо применить какую-то функцию из группы duration functions.
Предвосхищая ваш следующий вопрос, сообщаю, что в колонке ДВС у вас тест.
Если и после этого испытываете затруднения, то посоветую проследовать в раздел Работа.
Пришелец-прораб.
 
Спасибо, направление я понял.
 
Power Query (кнопками)
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Модель", type any}, {"Гар. номер", type any}, {"Организационная категория", type any}, {"Аналитическая категория", type any}, {"Вид простоя", type text}, {"Начало", type text}, {"Окончание", type text}, {"Прод-ть", type time}, {"ДВС", type any}, {"Место работы", type any}, {"Геозона", type any}, {"Источник классификации", type any}, {"Пользователь", type any}, {"Комментарий", type any}}),
    #"Changed Type with Locale" = Table.TransformColumnTypes(#"Changed Type", {{"Начало", type datetime}, {"Окончание", type datetime}}, "ru-RU")
in
    #"Changed Type with Locale"
Страницы: 1
Наверх