Страницы: 1
RSS
Cпособы быстрого распознавания и преобразования даты типа mm/dd/yyyy в дд.мм.гггг при импорте из текстового файла
 
Доброго всем времени суток, господа!

Прошу совета.
Тема даты / времени достаточно рассмотренная и на этом форуме, и на других. Однако, просмотрев многие сообщения, я так и не нашел ответа на свой вопрос. Поэтому, если кому из Вас доводилось уже видеть что-то подобное – не спешите закидывать помидорами, а лучше дайте ссылку )).

При импорте данных в Excel из внешнего текстового файла (.txt или .csv), ничего не могу поделать с датой формата «mm/dd/yyyy h:mm AM/PM». Даты типа 08/31/2013 (31 августа 2013 г.) остаются текстом, хоть ты тресни, а даты наподобие 09/02/2013 (2 сентября 2013 г.) распознаются, как 09.02.2013 (9 февраля).
Как я только ни пытался справиться – все бесполезно. Перепробовал все настройки импорта текста, ставил эксперименты с форматом ячеек – увы.

Проблема лечится, но двумя, достаточно извращенными, способами.
Способ первый. Поменять региональные настройки на «Английский (США)». Открыть файл, импортировать данные. Дата распознается, как надо. Сохранить и закрыть файл. Вернуть региональные настройки на место. Открыть файл и поставить формат ячеек с датой, какой необходим.
Второй способ (менее экзотический, но тоже «не айс»). При импорте данных из текстового файла в качестве дополнительного разделителя, указываем в том числе слэш. Тогда в excel дата будет разделена на составные части и выгрузится с разбивкой по разным столбцам. Далее, с помощью формулы СЦЕПИТЬ, соединяем составные части даты в новом столбце, в привычном нам порядке и с добавлением точки в качестве разделителя.  Потом – «копировать» / «специальная вставка» / «значения». Преобразуем текстовые значения в формат даты, удаляем лишние столбцы. Казалось бы, вот оно – решение проблемы, тем более, что манипуляции с формулами можно поручить нехитрому макросу. Однако же, когда речь идет об импорте и обработке порядка 70-100 тыс. строк, это лишние тормоза. Да и такие манипуляции с датой не добавляют уверенности в корректности итогов, тем паче, что впоследствии дата необходима для фильтрации данных.
Так вот, собственно, вопрос.
Может быть, есть какой-то иной способ быстрого и безболезненного преобразования значения даты при импорте – без баловства с региональными настройками, манипуляций с формулами и плясок с бубном?
 
Извиняюсь, много текста, читать не умею, поэтому из 2 предложений вывод:
Код
=--(ПРАВБ(A1;4)&"/"&ЛЕВБ(A1;5))
 
Дико извиняюсь за молчание - командировки...
Вот уважаемый Nic70y не дочитал до конца, а я писал, что решение проблемы формулами - не лучшее, уж больно много "но". Например, как я писал, даты типа 09/02/2013 (2 сентября 2013 г.) распознаются при импорте данных автоматом, как 09.02.2013 (9 февраля) и предложенная выше формула становится бесполезной... :(  Обходное решение проблемы нашлось, данные импортирую из xml-файлов, благо, что есть и такая возможность и там с датами все ок.
Однако же на будущее, хотелось бы иметь в запасе и способ решения описанной проблемы.
 
Просто делайте импорт данных макросом путём чтения текста кодом построчно.
Ну или сразу весь файл в массив, например так:
Код
With CreateObject("Scripting.FileSystemObject")
With .GetFile("C:\primer.csv").OpenAsTextStream 'open file
iTextArr = Split(.ReadAll, vbnewline): .Close 'read it and then close
End With
End With
далее создаём массив для результата, циклом перекладываем данные из iTextArr с нужным преобразованием.
Т.к. эти даты по идее всегда в одном месте в одном виде - то проблем нет.
Ну а если в разном виде - можно в макросе что угодно накрутить, навесить кучу проверок.
Изменено: Hugo - 25.09.2013 17:54:23
 
Ок, спасибо. Попробую обязательно!
Страницы: 1
Читают тему
Наверх