1

Тема: VBS: вызвать Excel и загрузить текстовый файл с разделителями.

Прочитал совет, что в VBS нужно предварительно создать все константы VBA и затем методом .Open (.OpenText в моем случае) открыть файл без использования конструкций типа:
<Параметр> := <Значение> . Все здорово, начал конструировать метод .OpenText в VBA, но уже 2-ой параметр дает ошибку:

 Dim fln As String
 
 fln = "C:\5NT\WordRep\f118-2332.txt"

 Workbooks.OpenText(fln,1251)

Текст ошибки:

Compile error:
Expected: =

Полный текст оператора в VBA:

 Workbooks.OpenText Filename:="C:\5NT\WordRep\f118-2332.txt", Origin:=1251, _
        StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False _
        , Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 2), _
        Array(3, 2), Array(4, 2), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), _
        Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array( _
        16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1)), TrailingMinusNumbers _
        :=True

Можно эту проблему как-то обойти или перепрыгнуть? Использовать VBA нельзя - у юзеров в офисе макросы запрещены.

2

Re: VBS: вызвать Excel и загрузить текстовый файл с разделителями.

Никаких «As String» и т.п. В VBScript все скалярные переменные имеют тип Variant (подтип — VarType()/TypeName() — другое дело).

Option Explicit

Dim objExcel
Dim objWorkbook

Set objExcel = WScript.CreateObject("Excel.Application")

' Для отладки делаем видимым окно
objExcel.Visible = True
objExcel.UserControl = True

Set objWorkbook = objExcel.Workbooks.Open("C:\Documents and Settings\User\Мои документы\Книга1.xls")
…

3

Re: VBS: вызвать Excel и загрузить текстовый файл с разделителями.

Спасибо, alexii. Но нужно открыть текстовый файл с разделителями, поэтому нужны все параметры из VBA команды:

  Workbooks.OpenText Filename:="C:\5NT\WordRep\f118-2332.txt", Origin:=1251, _
                                           StartRow:=1, DataType:=xlDelimited...

4

Re: VBS: вызвать Excel и загрузить текстовый файл с разделителями.

DedBanzai, не доглядел последний про «Полный текст оператора в VBA». Пробуйте так:

Option Explicit

Const xlDelimited   = 1
Const xlDoubleQuote = 1

Dim objExcel
Dim objWorkbook


Set objExcel = WScript.CreateObject("Excel.Application")

' Для отладки делаем видимым окно
objExcel.Visible = True
objExcel.UserControl = True

'.OpenText(FileName, Origin, StartRow, DataType, TextQualifier, 
'    ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo,
'    TextVisualLayout, DecimalSeparator, ThousandsSeparator, TrailingMinusNumbers, Local)

Set objWorkbook = objExcel.Workbooks.Open( _
    "C:\5NT\WordRep\f118-2332.txt", 1251, 1, _
    False, False, True, False, False, False, Empty, _
    Array( _
        Array(1, 1), Array(2, 2), Array(3, 2), Array(4, 2), _
        Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
        Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), _
        Array(13, 1), Array(14, 1), Array(15, 1), Array(16, 1), _
        Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1) _
    ), _
    Empty, Empty, Empty, Empty, True, True _
    )

'…

WScript.Quit 0

Но гарантии не даю: нужен пример реального текстового файла для отладки.