![](/img/trans.png)
[英]Create new sheets and then import three txt files into their own columns
[英]Create new sheets based on a list, and populate those sheets with three .txt files that need an insert/loop functionality within path name
我有一個城市列表:
Tokyo
Delhi
Shanghai
Sao+Paulo
Mexico+City
Cairo
Mumbai
Beijing
Dhaka
Osaka
這些城市中的每一個都有三個.txt 文件,這些文件以這種格式與每個城市相關:
PopulationFile{}.txt
LocationFile{}.txt
CityFile{}.txt
以下是同一文件夾中文件的完整列表:
PopulationFileTokyo?.txt
PopulationFileBeijing?.txt
PopulationFileCairo?.txt
PopulationFileDelhi?.txt
PopulationFileDhaka?.txt
PopulationFileMexico+City?.txt
PopulationFileMumbai?.txt
PopulationFileOsaka.txt
PopulationFileSao+Paulo?.txt
PopulationFileShanghai?.txt
LocationFileTokyo?.txt
LocationFileShanghai?.txt
LocationFileSao+Paulo?.txt
LocationFileOsaka.txt
LocationFileMumbai?.txt
LocationFileMexico+City?.txt
LocationFileDhaka?.txt
LocationFileDelhi?.txt
LocationFileCairo?.txt
LocationFileBeijing?.txt
CityFileTokyo?.txt
CityFileShanghai?.txt
CityFileSao+Paulo?.txt
CityFileOsaka.txt
CityFileMumbai?.txt
CityFileMexico+City?.txt
CityFileDhaka?.txt
CityFileDelhi?.txt
CityFileCairo?.txt
CityFileBeijing?.txt
這是目標:
使用新的工作簿,我想自動化這個過程。 我想要
這是我創建的一個宏,顯示了此過程的手動步驟(創建三張工作表,然后返回並插入相關文件):
Sub Macro3()
'
' Macro3 Macro
' Name sheet, create sheet, create sheet, insert data, insert data, insert data, switch sheet, insert data, insert data, insert data
'
'
Sheets("Sheet1").Select
Sheets("Sheet1").Name = "Tokyo"
Sheets.Add After:=ActiveSheet
Sheets("Sheet2").Select
Sheets("Sheet2").Name = "Delhi"
Sheets.Add After:=ActiveSheet
Sheets("Sheet3").Name = "Shanghai"
Sheets("Tokyo").Select
Application.CutCopyMode = False
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;/Users/MyName/PycharmProjects/pythonProject7/PopulationFileTokyo" & Chr(10) & ".txt" _
, Destination:=Range("$A$2"))
.Name = "PopulationFileTokyo" & Chr(10) & ""
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.RefreshPeriod = False
.TextFilePromptOnRefresh = False
.TextFilePlatform = 10000
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Range("B2").Select
Application.CutCopyMode = False
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;/Users/MyName/PycharmProjects/pythonProject7/LocationFileTokyo" & Chr(10) & ".txt" _
, Destination:=Range("$B$2"))
.Name = "LocationFileTokyo" & Chr(10) & ""
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.RefreshPeriod = False
.TextFilePromptOnRefresh = False
.TextFilePlatform = 10000
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Range("C2").Select
Application.CutCopyMode = False
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;/Users/MyName/PycharmProjects/pythonProject7/CityFileTokyo" & Chr(10) & ".txt" _
, Destination:=Range("$C$2"))
.Name = "CityFileTokyo" & Chr(10) & ""
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.RefreshPeriod = False
.TextFilePromptOnRefresh = False
.TextFilePlatform = 10000
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Sheets("Delhi").Select
Range("A2").Select
Application.CutCopyMode = False
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;/Users/MyName/PycharmProjects/pythonProject7/PopulationFileDelhi" & Chr(10) & ".txt" _
, Destination:=Range("$A$2"))
.Name = "PopulationFileDelhi" & Chr(10) & ""
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.RefreshPeriod = False
.TextFilePromptOnRefresh = False
.TextFilePlatform = 10000
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Range("B2").Select
Application.CutCopyMode = False
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;/Users/MyName/PycharmProjects/pythonProject7/LocationFileDelhi" & Chr(10) & ".txt" _
, Destination:=Range("$B$2"))
.Name = "LocationFileDelhi" & Chr(10) & ""
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.RefreshPeriod = False
.TextFilePromptOnRefresh = False
.TextFilePlatform = 10000
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Range("C2").Select
Application.CutCopyMode = False
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;/Users/MyName/PycharmProjects/pythonProject7/CityFileDelhi" & Chr(10) & ".txt" _
, Destination:=Range("$C$2"))
.Name = "CityFileDelhi" & Chr(10) & ""
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.RefreshPeriod = False
.TextFilePromptOnRefresh = False
.TextFilePlatform = 10000
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Sheets("Shanghai").Select
Range("A2").Select
Application.CutCopyMode = False
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;/Users/MyName/PycharmProjects/pythonProject7/PopulationFileShanghai" & Chr(10) & ".txt" _
, Destination:=Range("$A$2"))
.Name = "PopulationFileShanghai" & Chr(10) & ""
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.RefreshPeriod = False
.TextFilePromptOnRefresh = False
.TextFilePlatform = 10000
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Range("B2").Select
Application.CutCopyMode = False
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;/Users/MyName/PycharmProjects/pythonProject7/LocationFileShanghai" & Chr(10) & ".txt" _
, Destination:=Range("$B$2"))
.Name = "LocationFileShanghai" & Chr(10) & ""
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.RefreshPeriod = False
.TextFilePromptOnRefresh = False
.TextFilePlatform = 10000
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Range("C2").Select
Application.CutCopyMode = False
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;/Users/MyName/PycharmProjects/pythonProject7/CityFileShanghai" & Chr(10) & ".txt" _
, Destination:=Range("$C$2"))
.Name = "CityFileShanghai" & Chr(10) & ""
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.RefreshPeriod = False
.TextFilePromptOnRefresh = False
.TextFilePlatform = 10000
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub
最后,結果應該是 10 張名為 [Cities] 的工作表,其中第 1 列包含 PopulationFile{Cities}.txt,第 2 列包含 LocationFile{Cities}.txt,第 3 列包含 CityFile{Cities}.txt。 最后應將 30.txt 文件導入到相應的工作表中。
下面是Python代碼,它執行創建這些文件並寫入內容:
Cities.txt
Tokyo
Delhi
Shanghai
Sao+Paulo
Mexico+City
Cairo
Mumbai
Beijing
Dhaka
Osaka
readNames = open('Cities.txt', 'r').readlines()
print(readNames)
for i in readNames:
open('PopulationFile{}.txt'.format(i), 'w').write('Pop1\nPop2\nPop3')
open('LocationFile{}.txt'.format(i), 'w').write('Loc1\nLoc2\nLoc3')
open('CityFile{}.txt'.format(i), 'w').write('City1\nCity2\nCity3')
如果需要任何其他信息或進一步澄清,請詢問!
請測試下一個代碼。 但請注意消除文件名末尾的奇怪字符(您顯示的文本中的問號,以及代碼中的Chr(10)
,這是不允許的。文件名放在兩行中是不允許的Windows...)。 所以, PopulationFileTokyo?.txt
應該變成PopulationFileTokyo.txt
等等。 並在運行之前仔細閱讀代碼行注釋:
Sub testPopulateCities()
Dim wb As Workbook, foldPath As String, fileName As String, arrTxt
Dim arrC, cit, arrCol, cl, colNo As Long, sheetN As String, i As Long
'fill the cities array:
arrC = Split("Tokyo,Delhi,Shanghai,Sao+Paulo,Mexico+City,Cairo,Mumbai,Beijing,Dhaka,Osaka", ",")
arrCol = Split("Population,Location,City", ",") 'array of prefixes with meaning related to the insertion column
Set wb = Workbooks.Add(xlWBATWorksheet) 'create a new workbook with a single sheet
'insert the necessary sheets and naming them according to arrC array elements:
For Each cit In arrC
i = i + 1
If i = 1 Then
wb.Sheets(i).Name = cit 'name the first sheet
Else
wb.Sheets.Add(After:=wb.Sheets(wb.Sheets.Count)).Name = cit 'insert and name the following sheets
End If
Next cit
foldPath = "C:\Users\RealName\PycharmProjects\pythonProject7\" 'The folder path where the text files exist. Take care of its ending backslash (\)!!!
fileName = dir(foldPath & "*.txt") 'determine the first file in the folder
Do While fileName <> ""
For Each cl In arrCol 'iterate between the array elements
If InStr(fileName, cl) > 0 Then 'if the element exists in the file name:
colNo = Application.match(cl, arrCol, 0) 'column where to insert data
sheetN = Split(fileName, ".")(0)
sheetN = Right(sheetN, Len(sheetN) - (Len(cl) + 4)) 'sheet name to insert data
Exit For
End If
Next
'place the text file content in an array, split by vbCrLf (Carriage return - linefeed combination):
arrTxt = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(foldPath & fileName, 1).ReadAll, vbCrLf)
wb.Sheets(sheetN).cells(2, colNo).Resize(UBound(arrTxt) + 1, 1) = Application.Transpose(arrTxt) ' drop the array content
fileName = dir() 'continue the iteration between files
Loop
MsgBox "Ready...", vbInformation, "Job done"
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.