Самый простой способ создания нескольких документов Word с добавочным номером?

273
DakotaD

Мне нужно создать около 80 документов Word, которые идентичны, за исключением числового идентификатора в документе. Идентификатор совпадает с именем файла документа, например. документ с именем «SN-100.doc» должен иметь строку «SN-100» внутри текста документа.

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

/SN001/SN-1.doc /SN002/SN-2.doc . . . /SN080/SN-80.doc 

Какой самый простой и быстрый способ сделать это?

0
Вы надеетесь на нулевой программный ответ? Потому что я буду очень удивлен, если таковой будет. Если вам нужно сделать это только один раз, просто сделайте это вручную, потому что вы сэкономите бесчисленное количество часов. MonkeyZeus 10 лет назад 0
Если сами документы не имеют какой-то особой характеристики (что не ясно из того, как вы их просили, и тем более из вашего ответа), почему бы просто не скопировать * n * раз файл, а затем использовать инструмент массового переименования для упорядочивания и сортировки документы? Doktoro Reichard 10 лет назад 1
@DoktoroReichard Моя основная трудность заключается в том, что каждый файл содержит небольшую часть информации, уникальной для других. В моем конкретном случае у меня есть преимущество в том, что уникальная информация в документе совпадает с именем файла документа без расширения типа файла. DakotaD 10 лет назад 0

1 ответ на вопрос

1
DakotaD

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

Первая часть включала добавление Закладки с именем «FileName», где я хотел получить свой идентификатор. Следующий макрос обновляет Закладку до имени файла при открытии документа:

Private Sub Document_Open() ' ' Document_Open Macro ' ' Application.OnTime (Now + TimeValue("00:00:02")), "ProcessActiveDocument"  End Sub  Sub ProcessActiveDocument() Dim BmkNm As String, BmkRng As Range, FileName As String BmkNm = "FileName" FileName = ActiveDocument.Name If InStrRev(FileName, ".") > 0 Then FileName = Left(FileName, InStrRev(FileName, ".") - 1) If ActiveDocument.Bookmarks.Exists(BmkNm) Then Set BmkRng = ActiveDocument.Bookmarks(BmkNm).Range If BmkRng.Text = FileName Then Exit Sub BmkRng.Text = FileName ActiveDocument.Bookmarks.Add BmkNm, BmkRng Else MsgBox "Bookmark: " & BmkNm & " not found." End If Set BmkRng = Nothing End Sub 

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

Следующая часть была скриптом Python для дублирования файлов и открытия каждого запускающего макроса.

import os import shutil  ref_dir_base = "C:/SN" word_doc = 'SN-' word_ext = '.doc' ref_num = 1 ref_str = str(1000+ref_num)[1:] begin_num = 2 stop_num = 12 word_exec = '\"C:/Program Files (x86)/Microsoft Office/Office14/Winword.exe\"'   for i in range(begin_num, stop_num+1): num_str = str(1000+i)[1:] shutil.copytree(ref_dir_base+ref_str, ref_dir_base+num_str) old_doc_name = word_doc + str(ref_num) + word_ext new_doc_name = word_doc + str(i) + word_ext new_path = ref_dir_base + num_str + os.altsep os.rename(new_path + old_doc_name, new_path + new_doc_name)   for i in range(begin_num, stop_num+1): num_str = str(1000+i)[1:]  new_doc_name = word_doc + str(i) + word_ext new_path = ref_dir_base + num_str + os.altsep exec_param = '\"'+new_path+new_doc_name + '\"' exec_str = '\"'+word_exec+' '+exec_param +'\"' os.startfile(exec_param) 

Единственная проблема этого подхода заключается в том, что документ Word остается открытым и несохраненным, поэтому пользователю необходимо сохранить документ, чтобы изменения вступили в силу.