VB скрипт рекурсия и динамическое именование файлов - PullRequest
0 голосов
/ 10 февраля 2012

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

1 - вывести диалог, запрашивающий рабочий каталог для обработки

2 - создать «текстовый» подкаталог

3 - открыть файл слова, запустить макрос слова в файле и сохранить его как текстовый файл, используя то же имя файла, что и у документа word

4- Повторите шаг 3 для всего содержимого каталога

Пока что я выполнил шаг 3 и протестировал его, сохранив наименование файла, которое, как я думал, будет самым трудным для понимания (заставить слово macro работать незаметно), но оно работает отлично.

За последние несколько недель я самостоятельно учил питона, и я ударил стену, пытаясь заставить слово макрос выстрелить, попробовал его в VBS и BAM, работал сразу же. Но я понятия не имею, как сделать это рекурсивным по всему каталогу или взять исходные имена файлов с переменной и переименовать с той же самой переменной. Я понимаю, что некоторые из них являются основными вопросами, и прошу прощения за это - отсылать меня к документации, чтобы помочь мне учиться здесь абсолютно нормально. Мой код для этого вставлен ниже для справки, чтобы увидеть, что я делаю.

Любая помощь в том, чтобы заставить его обрабатывать весь каталог и сохранять одинаковые имена файлов (IE document.doc или .docx становится document.txt), была бы фантастической!

Спасибо за любые и все указатели!

-

Dim AppWord

Dim OpenDocument

Const docTXT = 2

Set AppWord = CreateObject("Word.Application")

AppWord.Visible = False

Set OpenDocument = AppWord.Documents.Open("C:\test\doc.docx")

AppWord.Run "macro1"

OpenDocument.SaveAs "C:\test\text\docnowtext", docTXT

OpenDocument.Close
Set OpenDocument = Nothing

AppWord.Quit
Set AppWord = Nothing

MsgBox "All done!"

1 Ответ

0 голосов
/ 10 февраля 2012

ключ к созданию этой работы вам нужно:

  • Вам нужно подсказать пользователю, возможно, с InputBox
  • Вы можете сгенерировать filename.txt из filename.docx, выполнив замену расширения
  • Определите Sub или Function, который рекурсивно вызывает себя
  • Реализация с использованием FileSystemObject , Файл и Папка объекты
  • Каждый раз, когда вы сталкиваетесь с .docx файлом, вы обрабатываете его
  • Всякий раз, когда вы встречаете Subfolder, вы используете его для рекурсии
  • Добавлена ​​поддержка файлов .doc и .docx

Например:

Option Explicit  

Sub DoSomethingWithDOCX(docxpath)
    Dim fso, file, folder, txtpath
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set file = fso.GetFile(docxpath)
    Set folder = file.ParentFolder
    If Not fso.FolderExists(folder + "\text") Then
        Call fso.CreateFolder(folder + "\text")
    End If
    If Right(file.Name, 5) = ".docx" Then
        txtpath = folder & "\text" & "\" & Replace(file.Name, ".docx", ".txt")
    ElseIf Right(file.Name, 4) = ".doc" Then
        txtpath = folder & "\text" & "\" & Replace(file.Name, ".doc", ".txt")
    End If

    ' @@TODO: Do your original code with docxpath and txtpath
End Sub

Sub SearchForDOCX(path)
    Dim fso, file, folder, subfolder, txt
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set folder = fso.GetFolder(path)
    For Each file in folder.Files
        If right(file.Name, 5) = ".docx" Then
            Call DoSomethingWithDOCX(path + "\" + file.Name)
        ElseIf right(file.Name, 4) = ".doc" Then
            Call DoSomethingWithDOCX(path + "\" + file.Name)
        End If
    Next
    'For Each subfolder in folder.SubFOlders
    '    Call SearchForDOCX(subfolder.Path)
    'Next
End Sub

Dim path
path = InputBox("Specify Folder to process")
Call SearchForDOCX(path)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...