2016-05-23 3 views
1

Вот код для копирования данных из текстового файла и вставки его в Excel. Я разделил текст на vbNewline, но мне также нужно разбить его по пространству.Скопируйте данные из текстового файла в Excel

Есть ли альтернативный метод разделения данных по пространству и как разбить данные на vbNewLineи пространство?

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

Спасибо Ansgar Wiechers –

+1

Зачем пользователю нужно вводить такие вещи, как ограничение строки и ограничение лимита? Нельзя ли это сделать из данных? Вы можете рассмотреть возможность замены пробелов запятыми в текстовом файле и сохранение его как файла csv - который Excel знает, как открыть (и запустить транспонирование для другого выравнивания). Кроме того, посмотрите, как работает текст в столбцах в Excel. –

+0

Вы также можете попробовать автоматизировать функцию [Текст в столбцы] (https://msdn.microsoft.com/en-us/library/office/ff193593.aspx) –

ответ

3

VBScript не позволяет разбивать строку на несколько разделителей за один шаг. Вам нужно разбить его на первый разделитель, затем перебрать полученный результирующий массив и разбить подстроки на второй разделитель и так далее.

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

Если вы хотите поместить все слова в один массив для дальнейшей обработки вы бы поместить их в динамически изменяемый массив:

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 

В качестве альтернативы можно использовать ArrayList:

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

Остерегайтесь того, что динамические массивы VBScript работают с большими объемами данных, потому что каждый раз, когда вы изменяете размер массива, интерпретатор создает новый массив, копирует все данные из exi sting array, затем присваивает новый массив переменной.

С другой стороны, создание объекта ArrayList означает много накладных расходов, поэтому он не выполняет так же, как встроенные массивы VBScript для небольших объемов данных.

+0

Еще раз спасибо Ansgar Wiechers .. –

+0

@sebastinsaba Добро пожаловать. Однако Джон Коулман поднимает некоторые действительные моменты. Ваш вопрос не слишком ясен о том, что вам нужно для «ручной» строки/столбца. Там могут быть лучшие способы обработки ваших данных, в зависимости от того, чего вы действительно хотите достичь. –

+0

Если я использую для каждого цикла вместо цикла, будут ли соответствующие значения ячейкам правильно вставляться (1,1) (1,2) (1,3) (2,1) (2,2) (2 , 3) наоборот. –

Смежные вопросы