2011-02-08 162 views
3

我有一個包含多個文本文件的文件夾,我每天都會添加一個文本文件。所有文本文件格式都相同,並以管道分隔。我可以將多個文本文件導入到一個Excel表單中嗎?

是否有可能爲excel創建代碼,該代碼將自動將多個文本文件中的數據導入到一個工作表中?

我發現了一些代碼可以導入文件夾中的所有文本文件,但只有我將它全部更改爲逗號分隔第一個。另外,如果我將文件添加到文件夾中,我無法更新它。

任何幫助將不勝感激!

+0

首先加入他們的行列,並導入結果呢? –

回答

1

聽起來好像運行腳本來循環目錄中的所有文件,創建一個由所有文件的內容組成的新文件作爲新行,並將其另存爲csv。是這樣的:

import os 

basedir='c://your_root_dir' 
dest_csv="<path to wherever you want to save final csv>.csv" 
dest_list=[] 


for root, subs, files in os.walk(basedir): 
    for f in files: 
     thisfile=open(basedir+f) 
     contents=thisfile.readlines() 
     dest_list.append(contents) 

#all that would create a list containing the contents of all the files in the directory 
#now we'll write it as a csv 

f_csv=open(dest_csv,'w') 
for i in range(len(dest_list)): 
    f_csv.write(dest_list[i]) 
f_csv.close() 

你可以保存腳本之類的地方,每天運行它,然後在Excel中打開CSV產生。這假設你想從每個文件中獲取特定目錄中的數據,並且你需要的所有文件都在一個目錄中。

4

處理文件的一個好方法是'FileSystemObject'。要在VBA這可需要將引用添加到它:

(選擇工具\ References菜單在引用對話框中,選擇「Microsoft腳本運行」。)

下面的代碼示例將讀取所有文件夾中的文件,一次一行地讀取它們的內容,將每行分割成|分隔位,並將這些位寫入從單元格A1開始的活動工作表,每行一行。

Sub ReadFilesIntoActiveSheet() 
    Dim fso As FileSystemObject 
    Dim folder As folder 
    Dim file As file 
    Dim FileText As TextStream 
    Dim TextLine As String 
    Dim Items() As String 
    Dim i As Long 
    Dim cl As Range 

    ' Get a FileSystem object 
    Set fso = New FileSystemObject 

    ' get the directory you want 
    Set folder = fso.GetFolder("D:\YourDirectory\") 

    ' set the starting point to write the data to 
    Set cl = ActiveSheet.Cells(1, 1) 

    ' Loop thru all files in the folder 
    For Each file In folder.Files 
     ' Open the file 
     Set FileText = file.OpenAsTextStream(ForReading) 

     ' Read the file one line at a time 
     Do While Not FileText.AtEndOfStream 
      TextLine = FileText.ReadLine 

      ' Parse the line into | delimited pieces 
      Items = Split(TextLine, "|") 

      ' Put data on one row in active sheet 
      For i = 0 To UBound(Items) 
       cl.Offset(0, i).Value = Items(i) 
      Next 

      ' Move to next row 
      Set cl = cl.Offset(1, 0) 
     Loop 

     ' Clean up 
     FileText.Close 
    Next file 

    Set FileText = Nothing 
    Set file = Nothing 
    Set folder = Nothing 
    Set fso = Nothing 

End Sub 

子是故意簡化以保持清醒(我希望),需要的工作進行穩健(如添加錯誤處理)

+0

對於那些希望用Tab分隔的用戶使用vbTab而不是「|」 – kunaguvarun

相關問題