Изменение формата даты при слиянии

Обсуждение разнообразного программного обеспечения.
gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Изменение формата даты при слиянии

Сообщение gjghjc » 10.05.2007 (Чт) 8:57

Доброго времени суток.
Понадобилось мне слить вордовский документ с данными из экселя.
И наступил я на такие вот грабли.
В системе формат даты dd.mm.yyyy, в ячейке экселя тожеdd.mm.yyyy при слиянии "умный" ворд ХР переделывает формат даты на m/d/yyyy. Думал это глюк машины на работе.... (и винда и офис XP ) Проверил дома (Win2k и офис 2003) ТОЖЕ САМОЕ... Что это может быть?
Есть конечно идея после формирования документа прогнать по нему макрос который найдет даты и приведет их к нужному формату.. Но это как-то через Ж... получится.
Утро добрым не бывает!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.05.2007 (Чт) 9:08

Полю слияния можно назначить форматирование. Ключами поля. Назначь.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Сообщение gjghjc » 10.05.2007 (Чт) 9:30

в форматировании нашел только "Первая прописная" "Все прописные" и т.д. ни слова о формате даты
Утро добрым не бывает!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.05.2007 (Чт) 9:59

Хм. Как же я делал?
То ли даты текстом в Excel писал? :roll: То ли форматирование в Excel накладывал, и оно в ворде появлялось? Давно это было...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 10.05.2007 (Чт) 10:37

Ничего не понимаю. У меня все проделывается правильно (или я делаю неправильно?)

Есть документ Excel с рядом строк 12.12.2007 ... 20.12.2007.
Формат ячеек - дата "dd.mm.yyyy".
Произвожу слияние с документом Word. Формат данных не изменяется - те же самые 12.12.2007 ... 20.12.2007.

gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Сообщение gjghjc » 10.05.2007 (Чт) 10:51

Не плохо было бы если бы ты бы вспомнил бы :)
Если даты текстом писать то помогает... но тогда возникает следующий вопрос.
Экселевский файл формируется запросом и экспортом в файл при помощи ibexpert.
ЕСЛИ пытаюсь сделать что-то типа
Код: Выделить всё
Select Cstring(Дата_Рождения) FROM Таблица

матюкается на непознаный токен
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, char 9.
cstring.
(Сервер бд FireBird 1.5)
Утро добрым не бывает!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.05.2007 (Чт) 11:20

Amed правильно написал. У меня так же, я проверил.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Сообщение gjghjc » 10.05.2007 (Чт) 11:59

более чем странно.... у меня на двух машинах не получилось :(
Утро добрым не бывает!

gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Сообщение gjghjc » 10.05.2007 (Чт) 13:37

уже залез в реестр.... в настройки BDE

было
Код: Выделить всё
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Borland\Database Engine\Settings\SYSTEM\FORMATS\DATE]
"SEPARATOR"="/"
"MODE"="0"
"FOURDIGITYEAR"="FALSE"
"YEARBIASED"="TRUE"
"LEADINGZEROM"="FALSE"
"LEADINGZEROD"="FALSE"


сделал

Код: Выделить всё
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Borland\Database Engine\Settings\SYSTEM\FORMATS\DATE]
"SEPARATOR"="."
"MODE"="1"
"FOURDIGITYEAR"="TRUE"
"YEARBIASED"="TRUE"
"LEADINGZEROM"="TRUE"
"LEADINGZEROD"="TRUE"

НЕ ПОМОГЛО!!!
Какие еще будут версии?
Утро добрым не бывает!

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 15.05.2007 (Вт) 14:04

Когда-то давно тоже делал нечто подобное, и была подобная проблема - менялся формат при слиянии (правда, у меня были не даты, а числа).

Тогда помогло следующее: у офисов XP и 2003 в VBA есть какой-то параметр, который заставляет выполнять слияние как офис 2000, в нем все работало правильно. Сейчас попробую поискать, у какого метода этот параметр был, и как он назывался :lol:

UPD: Вроде, нашел - у Mailmerge.Open DataSource параметр SubType:= wdMergeSubTypeWord2000.
Быть... или не быть. Вот. В чём вопрос?

gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Сообщение gjghjc » 16.05.2007 (Ср) 9:57

uhm
Получилось!!!!
Только вот какая штука.... я записал макрос начиная с установки источника данных....
код такой
Код: Выделить всё
   ActiveDocument.MailMerge.OpenDataSource Name:="D:\DOGOVOR\print_dog.xls", _
        ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
        AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
        WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
        Format:=wdOpenFormatAuto, Connection:= _
        "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=D:\DOGOVOR\print_dog.xls;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=35" _
        , SQLStatement:="SELECT * FROM `print_dog$`", SQLStatement1:="", SubType _
        :=wdMergeSubTypeWord2000
     
    With ActiveDocument.MailMerge
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
         
        With .DataSource
            .FirstRecord = 1
            .LastRecord = 3
        End With
        .Execute Pause:=False
    End With

Если SubType оставить прежним wdMergeSubTypeAccess то все нормально. Если изменить на wdMergeSubTypeWord2000 вылетает ошибка при запуске макроса "Не удалось открыть источник данных"
Run-time error 5922

Если в качестве источника использовать DBF и добавить в код On Error Resume Next то слияение проходит но в процессе ДВАЖДЫ вылетает сообщение
UNEXPECTED ERROR FROM EXTERNAL DATABASE DRIVER (10019)
Жму ОК и в итоге вижу в слитом документе ПРАВИЛЬНЫЕ ДАТЫ. :)
Но вот это сообщение.... смущает.
Утро добрым не бывает!

gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Сообщение gjghjc » 16.05.2007 (Ср) 10:05

УРЯ!!! ТЕПЕРЬ ТОЧНО ЗАРАБОТАЛО!!!!
Проблема была в ЭТОМ
Extended Properties=dBASE IV
Макрос записал
Extended Properties=""""

А вот если попробовать проделать тоже с Экселевским файлом... т.е. корректно прописать Extended Properties ругается на то что строка длиннее 255 символов :shock:

Отдельное спасибо uhm и авторам http://www.connectionstrings.com
Утро добрым не бывает!

gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Сообщение gjghjc » 16.05.2007 (Ср) 15:14

Дурдом какой-то.... опять не работает
Код: Выделить всё
On Error Resume Next

    ActiveDocument.MailMerge.OpenDataSource Name:="D:\DOGOVOR\print_dog.dbf", _
        ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
        AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
        WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
        Format:=wdOpenFormatAuto, Connection:= _
        "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=D:\DOGOVOR;Mode=Read;Extended Properties=dBASE IV;Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=18;Jet OLEDB:Database Locking M" _
        , SQLStatement:="SELECT * FROM print_dog", SubType:= _
        wdMergeSubTypeWord2000
        'wdMergeSubTypeAccess
    With ActiveDocument.MailMerge
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = wdDefaultFirstRecord
            .LastRecord = wdDefaultLastRecord
        End With
        .Execute Pause:=False
    End With
End Sub


Если убрать On error опять получем что длина строки > 255 символов
Я В ШОКЕ!!! :shock: :shock: :shock: :shock: :shock:
Утро добрым не бывает!

gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Сообщение gjghjc » 17.05.2007 (Чт) 14:15

Вобщем в связи с нестабильностью выше работы выше приведенного кода извратился так.
На этапе формирования файла с данными путем экспорта из базы сделал такое вот чудо... Скажу сразу нашел на форуме SQL.RU (не сочтите рекламой :) )

Код: Выделить всё
CAST(Case When Extract(Day From BirthDate )<10 Then '0'||Extract(Day From BirthDate) Else Extract(Day From BirthDate) End ||'.'||
Case When Extract(Month From BirthDate)<10 Then '0'||Extract(Month From BirthDate) Else Extract(Month From BirthDate) End ||'.'||
Extract(Year From BirthDate) as char (10)) as BirthDate

В итоге в таблицу дата попадает уже в строковом виде и нормально тянется в шаблон договора
Утро добрым не бывает!


Вернуться в Программное обеспечение

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24

    TopList