Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Изменить свойство множеству файлов MS Word / 9 сообщений из 9, страница 1 из 1
10.08.2010, 23:02
    #36784994
BagaBaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить свойство множеству файлов MS Word
Есть кучка вордовых файлов. У всех у них надо заменить автора и организацию (на известные значения). Открывать каждый файл и через свойства документа править - долго и муторно. Можно ли это автоматизировать? Если да, то как? В VBA не силен?
...
Рейтинг: 0 / 0
11.08.2010, 08:47
    #36785200
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить свойство множеству файлов MS Word
BagaBaga,

очень просто, создаете процедуру получающую весь список файлов из папки через dir
организовываете цикл по поочередному открытию каждого файла
ищете в BuiltinDocumentProperties нужные Вам Property по name
меняете их value на нужные


сложность знать какие name Вам нужны, но можно просто сначала получить все Name какие есть и выбрать нужные.

я сейчас попробовал все меняется легко
...
Рейтинг: 0 / 0
11.08.2010, 08:54
    #36785208
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить свойство множеству файлов MS Word
BagaBaga,

если у вас Word >= 2007, то можно сделать через openxml.
...
Рейтинг: 0 / 0
11.08.2010, 16:55
    #36786522
BagaBaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить свойство множеству файлов MS Word
Shamanus,

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

1.
>>... создаете процедуру получающую весь список файлов из папки через dir
Если вы про VBA, то уже нужно помощь.
Если из командной строки, то можно так
dir *.doc
и, допустим, перенаправить куда-нибудь вывод.
А можно через for
for %i in (*.doc) do делать_то_что_надо_с_каждым_файлом

2. Основная проблема
Я не понимаю, как сделать это:
>>ищете в BuiltinDocumentProperties нужные Вам Property по name
>>меняете их value на нужные

Менять нужно следующие поля: автор, руководитель, учреждение, база гиперссылки

PS
Word 2003

PPS
Правильно ли я понял:
в некотором документе пишу макрос (на VBA), который получает список документов на обработку, открывает каждый документ из списка, меняет в нем то, что нужно, закрывает/сохраняет
?
...
Рейтинг: 0 / 0
11.08.2010, 18:51
    #36786891
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить свойство множеству файлов MS Word
BagaBaga
Если из командной строки, то можно так
dir *.doc

вот такая процедура возвращает содержимое папки в массив
код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Public Sub ПрочитатьПапку(ByVal path As String, ByRef spisoK As Variant)

Dim DPath As String
Dim x As Integer
Dim FName As String

Erase spisoK
x =  0 
    FName = Dir(path, vbNormal)
    
    Do While FName <> ""
        If FName <> "." And FName <> ".." Then
        x = x +  1 
        End If
        FName = Dir
    Loop
If x >  0  Then
ReDim spisoK( 1  To x) As string
x =  0 
    FName = Dir(path, vbNormal)
    
    Do While FName <> ""
        If FName <> "." And FName <> ".." Then
           x = x +  1 
           spisoK( 1  To x) = Dir
        End If
        FName = Dir
    Loop

End If
End Sub
синтаксис ПрочитатьПапку [Путь], [Массив] , массив должен быть объявлен.
BagaBaga2. Основная проблема Я не понимаю, как сделать это:
открытие файла раскурите макрорекордером, а просмотр свойств это же совсем просто
ещё код
Код: plaintext
1.
2.
3.
4.
For Each property In w.BuiltinDocumentProperties
    If property.Name = "Author" Then property.Value = "Me"
    If property.Name = "Manager" Then property.Value = "MyBoss"
    If property.Name = "Hyperlink base" Then property.Value = "www.ru/base"
Next property
где w- это ваш активдокумент, в смысле тот, который открыт. Можно конечно и не открывать, но это гораздо сложнее для новичка и смысла особо не имеет.
BagaBagaПравильно ли я понял:
в некотором документе пишу макрос (на VBA), который получает список документов на обработку, открывает каждый документ из списка, меняет в нем то, что нужно, закрывает/сохраняет
да, создаете пустой документ, Alt+F11 - , в нем создаете свой модуль, в нем свою процедуру типа MySub.
Там пишете код в том порядке, который я указал. Потом запускаете код, он открывает все документы проделывает нужные изменения, сохраняет, закрывает. Вуаля - задача решена.
...
Рейтинг: 0 / 0
11.08.2010, 18:52
    #36786895
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить свойство множеству файлов MS Word
пардоньте в коде очепятка

не так
Код: plaintext
 spisoK( 1  To x) = Dir
а так
Код: plaintext
 spisoK( 1  To x) = FName
...
Рейтинг: 0 / 0
11.08.2010, 20:04
    #36787022
BagaBaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить свойство множеству файлов MS Word
Shamanus,

Спасибо!
...
Рейтинг: 0 / 0
11.08.2010, 22:23
    #36787214
BagaBaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить свойство множеству файлов MS Word
Ципихович Эндрю,

спасибо за ваши комментарии, но вступлюсь за Shamanus - он дал мне вполне понятное направление, куда копать.

Ваше решение (в части узнавания количества объектов в папке), конечно, куда правильнее, чем в цикле перебирать возвращенные объекты из данной папки и наворачивать счетчик (исключив из него текущую "." и родительскую ".." папки). Но для этого нужно знать эту ... кхм ... библиотеку. Я не знаю. Даже как редактор VBA вызвать в ворде лишь смутно догадывался...

Еще, для меня загадка, почему в коде пишем spisoK(1 To x) = FName вместо spisoK(x) = FName. Но это поправимо... попробую - там видно будет.

PS
Хотя, меотодологически "давать на блюдечке" - абсолютно не правильно.
...
Рейтинг: 0 / 0
12.08.2010, 08:20
    #36787412
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить свойство множеству файлов MS Word
BagaBaga, почему в коде пишем spisoK(1 To x) = FName вместо spisoK(x) = FName.
это моя ошибка копипаста, конечно правильно
Код: plaintext
1.
spisoK(x) = FName
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Изменить свойство множеству файлов MS Word / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]