DictionaryForumContacts

 Krio

link 27.06.2011 9:53 
Subject: ОФФ: преобразование форматы даты m/d/yyyy в dd.mm.yyyy
у меня док в Ворде, скопированный из Экселя, судя по всему.
очень много дат в формате m/d/yyyy. как бы мне их НЕ вручную преобразовать в dd.mm.yyyy?
копировала в Эксель, смотрела там свойства ячеек - что-то не получается.. к тому же некоторые даты оказались в Экселе в формате с точками, а не через слеш, хотя в Ворде все выглядят одинаково..

очень надеюсь на грамотный совет!

(P.S. макросы писать (пока) не умею...)

2

 tumanov

link 27.06.2011 10:19 
Если Ворд умный (после 2003), то там должны быть, кажется, регексы.
С их помощью можно переформатировать.

Если есть индизайн, там это работает с полтыка.
В индизайне пробовал сам. Про возможность этого процесса в Ворде только читал.

 Krio

link 27.06.2011 10:25 
Ворд 2003.
про Индизайн уже от Вас слышала, помню... :)

думаю, что в Экселе можно, но не могу пока найти, как.

 PicaPica

link 27.06.2011 12:46 
Хороший повод научиться писать макросы. Выйдет быстрее и полезнее. Дело-то нехитрое. Их, собственно, и писать чаще всего не надо. делаете требуемую последовательность действий по перестановке и замене мышью и клавиатурой, Word ее запомнит. Назначаете макрос клавише. Ставите курсор перед нужным фрагментом, нажимаете, все готово, переходите к следующему. Если чуть побольше поработать, то можно сделать и автоматическое нахождение нужных фрагментов.

 Krio

link 27.06.2011 13:15 
PicaPica, попробовала сделать по Вашему рецепту. макрос записала, но перетаскивать в нем не получается, только удалять/писать поверх, поэтому некорректно выходит при переходе на след. месяц... да и хотелось бы автоматизировать, конечно.

если не затруднит, пишите в личку, плиз; может, научусь :)

 Krio

link 27.06.2011 13:32 
в целом получилось, но есть одно большое НО: макрос привередливый, успех очень зависит от кол-ва цифр в рамках слеша, напр.
3/12/2010
10/20/2010 и
11/1/2010 -- это мне писать 3 разных макроса? главное, назначенные клавиши потом не перепутать :)
нда... уж лучше вручную)

3

 alk moderator

link 27.06.2011 13:48 
Все зависит от того, насколько Вы хотите разобраться в вопросе.
Макросы, думаю, писать не обязательно. Лучше всего все операции по преобразованию дат выполнять в Excel. Нужно четко представлять, что в Excel данные в ячейке могут не восприниматься как календарная дата, а просто как текст, содержащий соответствующие цифры и разделители. Особенно часто такое происходит, когда происходит вставка чего-то из буфера в Excel.
В общем, если операция вставки Вашего текста из Word в Excel Вам не кажется очень сложной, но тогда небольшими дополнительными усилиями можно заставить Excel снова распознать даты как даты, а затем очень простым приемом преобразовать их в другой формат даты.

 Krio

link 27.06.2011 14:18 
"заставить Excel снова распознать даты как даты" - ну, это я тоже пыталась - не получилось... причем не только у меня)
хотя лично я с Экселем не очень дружу, признаюсь честно))
я пыталась даты сначала определить как англ. в свойствах ячейки и изменить их формат, а затем поставить русский, и надеялась, что тогда формат автоматически преобразуется. к тому же ячейки скопировались по-разному- часть со слешем, так они вообще никак не изменялись, часть - через точку... в общем, там надо было еще как-то каждую ячейку обновить, видимо, а вот что дальше, не понятно...

alk, а хотите - вышлю Вам эти даты, попробуете, получится - расскажете, как :)
вопрос-то актуальный, думаю...

 AVPro

link 27.06.2011 14:49 
Дарю 20 минут своего времени:
(исходный формат: 3/12/2010, 10/20/2010
конечный формат : 12.3.2010, 20.10.2010)

Sub date_change()
On Error GoTo skip
restart:
Dim a, b, c
With Selection.Find
.Text = "2010"
.Execute FindText:="2010"
End With
c = Selection.Text
If Len(c) <> 4 Then GoTo skip
Selection.MoveLeft Unit:=wdCharacter, Count:=2
Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
b = Selection.Text
Selection.MoveLeft Unit:=wdCharacter, Count:=2
Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
a = Selection.Text
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdWord, Count:=5, Extend:=wdExtend
d = b & "." & a & "." & c
Selection = d
Selection.MoveRight Unit:=wdCharacter, Count:=1
GoTo restart
skip:
End Sub

При желании можно " г." после года вставлять.
Как видно, год используется 2010, т.е. даты с другим годом будут пропущены.
Это для Word.

 AVPro

link 27.06.2011 14:50 
Предварительно создайте копию файла:)

 AVPro

link 27.06.2011 14:52 
Еще важно: курсор должен быть в начале документа перед выполнением макроса.

 alk moderator

link 27.06.2011 15:08 
да мне-то как-то не интересно, я знаю, как это работает, ко мне часто пользователи обращаются с чем-то подобным.
Думаю, Вам нужно попробовать сделать следующее.
1) нужно прежде всего в Excel добиться того, что текст, введенный в ячейку воспринимался как дата. Критерий простой - Вы форматируете ячейку (через Формат/Ячейка...) как ячейку с датой/временем. Если в ячейке уже введено что-то, то выбираете такой вариант форматирования, который соответствует написанному. После изменения форматирования нужно принудительно выполнить "редактирование" того, что там было введено. Достаточно просто нажать F2, чтобы начать редактирование, проверить, не вставлено ли в ячейку что-то помимо текста с датой, удалить, если вставлено, нажать Enter, чтобы завершить и сохранить редактирование. Если все правильно сделано, то Excel начнет дату считать датой, и с этой ячейкой можно будет проделывать любые изменения через Формат/Ячейка..., представляя дату как угодно.
2) Чтобы не мучиться так со всеми ячейками по отдельности, особенно если в них ничего менять реально не надо, предусмотрен более быстрый механизм преобразования. Если у Вас получится пункт 1, я сообщу, как можно быстро обновить другие ячейки без индивидуального захода в каждую.

 Krio

link 27.06.2011 16:36 
alk, да, все ячейки считаются датой. правда, одни написаны как 11.12.2010, а другие - как 12/11/2010. это нужно унифицировать? у меня не получилось...

AVPro, спасибо! но, чтобы применить Ваш вариант, мне нужно проконсультироваться со специалистами))

 AVPro

link 27.06.2011 16:45 
Только предупредите специалистов, что All rights reserved, protected by law, без разрешения автора и т.д.:)

 Krio

link 27.06.2011 16:48 
проблема в том, что в ячейках со слешем невозможно изменить формат даты через Формат --Ячейки. он меняется только в ячейках с точками..
почему - понятия не имею. иначе бы всё было просто...

 Armagedo

link 27.06.2011 16:52 
а заменить слеш на точку большая проблема :)

 AVPro

link 27.06.2011 16:53 
нажмите на такую ячейку (где формат не меняется) и в строке формул надеюсь Вы знаете, что это) посмотрите, нет ли перед датой символа '

 eu_br

link 27.06.2011 16:53 
в Экселе
1) выделить все ячейки с датами
2) Ctrl+1
3) Язык (местоположение) - Русский
4) выбрать Дата - 14.03.2001 (первая строка)
5) ОК
6) Ctrl+C
в Ворде
7) Ctrl+V

 alk moderator

link 27.06.2011 17:40 
То, что записывается в ячейке, если Excel уже считает это датой, зависит только от того, как эта конкретная ячейка отформатирована в Формат/Ячейка/Число...
Для ячеек, которые уже считаются датой, там будет выбран тот или иной вариант ее представления. Никто не мешает для одной ячейки выбрать представление даты в формате чч.мм.гггг, а для другой - мм/чч/гг.
Но если ячейки даже отформатированы по-разному, и у них внутри даты, то можно просто выделить диапазон и установить для всех ячеек тот формат, который требуется. Они все сразу станут одинаково отформатированы. Еще раз подчеркиваю - если их содержимое действительно считается Excel'ем календарной датой. В противном случае, когда содержимое воспринимается как текст, номер с форматированием не пройдет.
Я считаю, что использовать для такой простой операции макросы - из пушки по воробьям. Нужно просто чуть лучше ориентироваться в Excel'е и макросы не понадобятся, вернее, понадобятся дял более серьезных вещей.

 Krio

link 27.06.2011 19:30 
уважаемые ответившие!
очень благодарна всем за внимание к моей проблеме, но, похоже, вы меня не слышите :)

вне зависимости от того, что я делаю и меняю ли слеш на точку, ячейки со слешем НЕ МЕНЯЮТ СВОЙ ФОРМАТ (сорри за капс), когда поступаю так, как описывает alk.
вот с этим-то феноменом я и пытаюсь разобраться! :)

AVPro - нет, никакого символа там нету.

всем особо заинтересованным с радостью вышлю сабж для научных экспериментов (хм, а, может, он заколдован?)

 Krio

link 27.06.2011 19:36 
т.е. все советы безусловно полезны и наверняка верны, просто у меня какой-то глюкнутый файл, и именно к нему (вернее, к его части) они абсолютно неприменимы. а жаль...

 alk moderator

link 27.06.2011 19:53 
Ок, вышлите мне Ваш файл по почте, я посмотрю и напишу здесь, что там было не так

 Krio

link 27.06.2011 20:17 

alk, выслала на alk@inbox.ru

 eu_br

link 27.06.2011 21:29 
либо защита стоит на ячейках, либо слэши не в ту сторону, либо какие-нибудь еще символы (пробелы?) есть там, где их быть не должно...

 alk moderator

link 27.06.2011 22:15 
посмотрел, получилось, завтра напишу подробно, что нужно сделать

 Krio

link 27.06.2011 23:13 
eu_br, защита была, я ее сняла - никакого эффекта... слеши в ту сторону. я их меняла на точки (см. выше) - не помогло. пробелов и пр. нету (разве что как-то хитро скрыты).

alk, спасибо!

 alk moderator

link 28.06.2011 8:17 
Итак, проблема Excel'я в том, что недостаточно только в нем поменять региональные установки, чтобы он начал правильно "глотать" различные форматы представления даты и времени. В Excel 97 было сделано тупо, но честно. Там при форматировании ячейки в разделе Дата отсутствовал этот сбивающий с толку выпадающий список с языками. Нужно было идти в Панель управления системы и в "Язык и региональные установки" менять язык на Английский (США), а формат даты на mm/dd/yyyy, чтобы тут же в Excel все перечиталось и стало восприниматься как следует.
В Excel 2003 дергать приходится уже в двух местах. Почему? Потому в самом Excel выбор языка при форматировании ячейки не позволяет сменить представление с dd.mm.yyyy на mm/dd/yyyy - там просто нет такого варианта.
Все равно придется идти в региональные установки системы, временно менять их на English (USA) c форматом даты mm/dd/yyyy, нажимать там кнопку Применить нужное количество раз.
Затем в Excel нужно выполнить хитрую команду - выделить столбец с датами, потому выбрать в меню Данные пункт Текст по столбцам..., а затем в открывшемся окне, ничего там не меняя, сразу нажать кнопку Готово. Это как раз позволит избавиться от всяких ' в начале строк и заставит Excel перечитать данные в выделенном столбце так, чтобы они воспринялись как календарные даты. Все до этого мертвые ячейки с 10/15/2010 или 11/05/2010 оживут и станут ячейками с датами в формате mm/dd/yyyy, как мы установили в Региональных установках системы. Если это не произошло, можно сходить в Формат/Ячейки/Число и посмотреть, выбран ли для выделенных ячеек вариант Дата и Язык Английский (США).
Теперь опять нужно топать в Региональные установки и поменять их на Русский, с форматом представления Даты дд.мм.гггг и не забыть нажать там Применить нужное количество раз.
Теперь осталось только в Excel для нашего выделенного столбца сходить в Формат/Ячейки/Число и выбрать Дата и язык Русский. Все ячейки преобразуются в нужный формат. Теперь там, где было 10/15/2010 станет 15.10.2010 и т.д.

 Krio

link 28.06.2011 9:30 
alk, спасибо за подробное пояснение! так всё работает, но... теперь уже ранее "живые" ячейки перевернулись наоборот %-)
в общем, кончаю я возиться с этим документом.

надеюсь, что эта ветка пригодится тем, кто впоследствии столкнётся с такой же проблемой, и поможет им.

 Krio

link 28.06.2011 9:36 
... в итоге таки получилось после ряда манипуляций))

еще раз всем огромное thanks и удачи в работе!
:-)

 

You need to be logged in to post in the forum