2016-05-23 19 views
1

Hier ist der Code zum Kopieren der Daten aus einer Textdatei und Einfügen in Excel. Ich habe den Text durch vbNewline geteilt, aber ich muss es auch durch den Raum teilen.Kopieren von Daten aus Textdatei in Excel

Gibt es eine alternative Methode zum Aufteilen der Daten nach Speicherplatz, und wie teilt man die Daten durch vbNewLineund Speicherplatz?

On Error Resume Next 

Dim objFSO, strTextFile, strData, strLine, arrLines 

Const ForReading = 1 

path = InputBox("Enter the path :","Select Your Path !","Type your path here") 

'name of the text file 
strTextFile = path 

'Create a File System Object 
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") 

'Open the text file - strData now contains the whole file 
strData = objFSO.OpenTextFile(strTextFile, ForReading).ReadAll 

'typesplit=inputbox("Enter the type ","Type to split(VbnewLine (or) <Space>)","vbnewline/space") 

'Split the text file into lines 
arrLines = Split(strData, vbNewLine) 

Set objExcel = CreateObject("Excel.Application") 
objExcel.Visible = True 
objExcel.Workbooks.Add 

intRow = 2 
k = 0 

align = InputBox("Enter the type of alignment...(default/horizontal/vertical)", _ 
     "Press h (or) v (or) d") 

If (align = "v") Then 
    rowlimit = InputBox("Enter the row limit") 
    For i=1 To 10 Step 1 
    For j=1 To rowlimit Step 1 
     objExcel.Cells(j, i).Value = arrLines(k) 
     k = k+1 
    Next 
    Next 
End If 

If (align = "h") Then 
    collimit = InputBox("Enter the col limit") 
    For i=1 To 10 Step 1 
    For j=1 To collimit Step 1 
     objExcel.Cells(i, j).Value = arrLines(k) 
     k = k+1 
    Next 
    Next 
End If 

MsgBox("Conversion Finished !!") 

Set objFSO = Nothing 
+0

Danke Ansgar Wiechers –

+1

Warum sollte der Benutzer Dinge wie Zeilenlimit und Col Limit eingeben? Konnte es nicht aus den Daten abgeleitet werden? Sie könnten Leerzeichen in der Textdatei durch Kommas ersetzen und sie als CSV-Datei speichern, die Excel zu öffnen weiß (und eine Transponierung für die andere Ausrichtung ausführt). Sehen Sie auch, wie Text-zu-Spalten in Excel funktioniert. –

+0

Sie könnten auch versuchen, die Funktion [Text zu Spalten] (https://msdn.microsoft.com/en-us/library/office/ff193593.aspx) zu automatisieren –

Antwort

3

VBScript ermöglicht es Ihnen nicht, eine Zeichenfolge in einem Schritt durch mehrere Trennzeichen zu teilen. Sie müssen es nach dem ersten Trennzeichen aufteilen, dann das resultierende Array durchlaufen und die Teilzeichenfolgen nach dem zweiten Trennzeichen aufteilen usw.

For Each line In Split(strData, vbNewLine) 
    For Each word In Split(line, " ") 
    'do something with each word 
    Next 
Next 

Wenn Sie alle Wörter in einem einzelnen Array setzen für eine spätere Verarbeitung Sie sie in eine dynamisch veränderbare Array setzen würde:

ReDim words(-1) 'define empty resizable array 
For Each line In Split(strData, vbNewLine) 
    For Each word In Split(line, " ") 
    ReDim Preserve words(UBound(words)+1) 
    words(UBound(words) = word 
    Next 
Next 

Alternativ könnten Sie eine ArrayList verwenden:

Set words = CreateObject("System.Collections.ArrayList") 
For Each line In Split(strData, vbNewLine) 
    For Each word In Split(line, " ") 
    words.Add word 
    Next 
Next 

Beachten Sie, dass dynamische VBScript-Arrays bei großen Datenmengen schlecht arbeiten, da der Interpreter bei jeder Größenänderung des Arrays ein neues Array erstellt und alle Daten aus dem exi kopiert Stachelarray, weist dann der Variablen das neue Array zu.

Auf der anderen Seite bedeutet die Instanziierung eines ArrayList Objekts eine Menge Overhead, so dass es nicht so gut funktioniert wie VBScript eingebaute Arrays für kleine Datenmengen.

+0

Noch einmal dank Ansgar Wiechers .. –

+0

@sebastinsaba Gern geschehen. John Coleman wirft jedoch einige gültige Punkte auf. Ihre Frage ist nicht klar, wofür Sie die "manuellen" Zeilen-/Spaltengrenzen benötigen. Je nachdem, was Sie eigentlich erreichen möchten, gibt es möglicherweise bessere Möglichkeiten, mit Ihren Daten umzugehen. –

+0

Wenn ich für jede Schleife anstelle von for Schleife verwende, können die entsprechenden Werte zu den Zellen richtig wie (1,1) (1,2) (1,3) (2,1) (2,2) einfügen (2 , 3) umgekehrt. –

Verwandte Themen