#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