Everything is pointless from a certain perspective.

utena.egloos.com

포토로그




docx들에서 find & replace를 일괄로 해주는 vbs

.vbs로 저장하고 doc* 파일들이 있는 곳에 던져놓고 실행하면 지정한 문자열을 몽땅 바꿔주는 스크립트
VBA로 실행하면 ReplaceAll의 경우 := 를 써서 상수지정이 되는데 vbs에선 이런게 안되므로
한참 검색하다 겨우 위치를 찾아서 넣음..가만 생각해보니 VBA에서 help찾으면 위치 나오지않던가...

원랜 파일목록을 자체 function등으로 읽어서 처리하려고 했는데, 귀찮아서 걍 만들어둔걸 수정하기가 역시 귀찮아서....-_-
목록용으로 쓰는 1.csv 파일이 생겼다 사라짐.

그리고 원래 파일변환목적으로 쓰던 넘을 재활용하는 바람에, 원래 doc들을 readonly로 읽어서 이상한 파일명으로 저장함..역시 수정귀찮


------- cut here ----------

set objDOC=createobject("Word.Application")
objDOC.visible=true


Set WshShell = CreateObject("WScript.Shell")
CurrentPath = WshShell.CurrentDirectory
' true가 있어야 csv 만들어질 때까지 기다림
WshShell.Run "cmd /c dir /b " & chr(34) & CurrentPath & "\*.doc*" & chr(34) & " > " & chr(34) & CurrentPath & "\1.csv" & chr(34), 1, true
Set fso = CreateObject("Scripting.FileSystemObject")
'Set ts = fso.OpenTextFile(chr(34) & CurrentPath & "\1.csv" & chr(34) , ForReading, false)
Set ts = fso.OpenTextFile( CurrentPath & "\1.csv" )

Do While ts.AtEndOfStream <> True
strDocName=ts.ReadLine
inputFile= CurrentPath & "\" & strDocName

Set d = objDOC.Documents.Open(inputFile, readonly)

Set objSelection = objDOC.Selection

With objSelection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "찾을거"
.Replacement.Text = "바꿀거"
.Execute ,,,,,,,,,,2 'const wdReplaceAll=2
End With

strDocName = chr(34) & CurrentPath & "\" & strDocName & ".docx" & chr(34)
d.SaveAs strDocName
d.Close
loop

ts.Close
set fso=nothing
set objSelection=nothing
objDOC.quit
set objDOC=nothing
WshShell.Run "cmd /c del " & chr(34) & CurrentPath & "\1.csv" & chr(34)