Как сохранить каждую строку в виде отдельного файла В ДРУГОМ КАТАЛОГЕ в Excel (с именем каталога, на которое ссылается один из столбцов)?

#excel #vba

Вопрос:

У меня есть 2 столбца в Excel:

 Folder Name | Content
cat  | Wall of text about how cats are cute but dangerous.
dog  | Wall of text about dogs.
bird | Miscellaneous writings about birds.
 

Родительский каталог является C:UsersUserDesktopPlayground

У меня есть 3 папки:

 C:UsersUserDesktopPlaygroundcat
C:UsersUserDesktopPlaygrounddog
C:UsersUserDesktopPlaygroundbird
 

Я хочу, чтобы вывод сохраненных документов был parse_me.py таким .

tl;dr: Я хочу, чтобы это было сгенерировано:

 C:UsersUserDesktopPlaygroundcatparse_me.py
C:UsersUserDesktopPlaygrounddogparse_me.py
C:UsersUserDesktopPlaygroundbirdparse_me.py
 

В настоящее время я пытался использовать этот код https://techcommunity.microsoft.com/t5/excel/how-to-save-each-row-of-a-spreadsheet-as-separate-text-files/m-p/1582516 для создания файлов .py, но это не совсем то, что я хочу (так как для каждого сгенерированного файла требуется уникальный идентификатор номера, и я хочу, чтобы все имена файлов были одинаковыми). Я также не знаю, как изменить код, чтобы он принимал буквы алфавита вместо цифр (поэтому у меня не было выбора, кроме как заменить первый столбец цифрами вместо названий животных.

 Sub SaveAsTextFile()
    Dim strPath As String
    Dim lngID As Long
    Dim strReport As String
    Dim r As Long
    Dim m As Long
    strPath = "C:UsersUserDesktopPlayground" amp; Application.PathSeparator
    m = Range("A" amp; Rows.Count).End(xlUp).Row
    For r = 2 To m
        lngID = Range("A" amp; r).Value
        strReport = Range("B" amp; r).Value
        Open strPath amp; lngID amp; ".py" For Output As #1
        Print #1, lngID; Tab; strReport
        Close #1
    Next r
End Sub
 

Приведенный выше код сгенерировал что-то вроде приведенного ниже, что мне не подходит.

 C:UsersUserDesktopPlayground1.py
C:UsersUserDesktopPlayground2.py
C:UsersUserDesktopPlayground3.py
 

Я хочу этого:

 C:UsersUserDesktopPlaygroundcatparse_me.py
C:UsersUserDesktopPlaygrounddogparse_me.py
C:UsersUserDesktopPlaygroundbirdparse_me.py
 

Ответ №1:

Что — то вроде этого должно сработать:

 Sub SaveAsTextFile()
    Const SPATH As String = "C:UsersUserDesktopPlayground"
    Dim rw As Range, ws As Worksheet
    
    Set ws = ActiveSheet
    For Each rw In ws.Range("A2:B" amp; ws.Range("A" amp; ws.Rows.Count).End(xlUp).Row).Rows
        PutContent SPATH amp; rw.Cells(1).Value amp; "parse.py", rw.Cells(2).Value
    Next rw
End Sub

Sub PutContent(f As String, content As String)
    CreateObject("scripting.filesystemobject"). _
                  opentextfile(f, 2, True).write content
End Sub