増分番号で複数のWord文書を作成する最も簡単な方法は?


0

文書内の数値識別子を除いて同一のWord文書を約80個作成する必要があります。識別子はドキュメントのファイル名と同じです。「SN-100.doc」という名前のドキュメントには、ドキュメントテキスト内に文字列「SN-100」が含まれている必要があります。

一意の各ドキュメントは、一意の数値識別子で指定されたフォルダの場所に存在します。たとえば、ファイルディレクトリ階層は次のようになります。

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

これを行う最も簡単で最速の方法は何ですか?


あなたはゼロプログラミングの答えを望んでいますか?ある場合、私は非常に驚くからです。これを1回だけ行う必要がある場合は、数え切れないほどの時間を節約できるため、手動で行うだけです。
MonkeyZeus

1
文書自体にある種の明確な特性(あなたが尋ねた方法から、そしてあなたの答えからは明らかではない)がなければ、なぜファイルをn回コピーするだけで、一括名前変更ツールを使用して文書を並べ替える?
ドクトロライチャード

@DoktoroReichard私の主な問題は、各ファイルに他のファイルとは異なる固有の情報が少し含まれていることです。私の特定のケースでは、ドキュメント内の一意の情報がファイルタイプ拡張子のないドキュメントのファイル名と同じであるという利点があります。
DakotaD

回答:


1

したがって、このソリューションはおそらくほとんどのユーザーにとってあまりにも具体的で複雑すぎますが、それでも私の問題は解決しました。

最初の部分は、識別子が必要な場所に「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文書が開いたまま保存されていないため、ユーザーが文書を保存して変更を有効にする必要があることです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.