2010-02-18 15 views
3

Я пытаюсь написать макрос Excel с помощью VBA для автоматизации импорта CSV-текста в электронную таблицу, но я никогда не делал этого раньше. Мне нужно убедиться, что мастер импорта текста, который появляется, запускается одинаково каждый раз. Шаги, которые мне нужно принять это:Автоматический импорт текста в Excel 2007

  1. Открыть файл, используя открытый файл диалоговое
  2. типа Set для Разграниченный
  3. Набор разделителей для запятой
  4. Установите все столбцы, которые будут импортированы в виде текста
  5. Автоподбор всех столбцов

Я не могу проглядеть в документации, которая показывает, как делать такие вещи, как открытые файлы. Даже быть в состоянии начать там было бы полезно.

+0

Возможно, вы захотите использовать PowerShell для автоматизации GUI - например. выполнять всю работу вне Excel. –

ответ

-3

В результате я решил внести некоторые изменения в функцию, прежде чем использовать ее.

Public Sub OpenCsv() 
    ' I don't expect any more columns than 256 in my environment, so I can 
    ' just fill this array and call it done. 
    Dim columnFormats(0 To 255) As Integer 
    For i = 0 To 255 
     columnFormats(i) = xlTextFormat 
    Next i 

    Dim filename As Variant 
    filename = Application.GetOpenFilename("All Files (*.*),*.*", 1, "Open", "", False) 
    ' If user clicks Cancel, stop. 
    If (filename = False) Then 
     Exit Sub 
    End If 

    Dim ws As Excel.Worksheet 
    Application.Workbooks.Add 
    Set ws = Excel.ActiveSheet 
    Application.DisplayAlerts = False 
    Sheets("Sheet2").Delete 
    Sheets("Sheet3").Delete 
    Application.DisplayAlerts = True 


    With ws.QueryTables.Add("TEXT;" & filename, ws.Cells(1, 1)) 
     .FieldNames = True 
     .AdjustColumnWidth = True 
     .TextFileParseType = xlDelimited 
     .TextFileTextQualifier = xlTextQualifierDoubleQuote 
     .TextFileConsecutiveDelimiter = False 
     .TextFileCommaDelimiter = True 
     ''// This array will need as many entries as there will be columns: 
     .TextFileColumnDataTypes = columnFormats 
     .Refresh 
    End With 
End Sub 

Благодаря вышеупомянутым ребятам, заставляющим меня идти.

+4

Обычно вы должны отмечать чужой ответ, как принято, если они доставят вас на правильный путь, даже если это не совсем то, что вы хотели. –

2
Public Sub Example() 
    Const csPath As String = "C:\Test\Example.csv" 
    Dim ws As Excel.Worksheet 
    Set ws = Excel.ActiveSheet 
    With ws.QueryTables.Add("TEXT;" & csPath, ws.Cells(1, 1)) 
     .FieldNames = True 
     .AdjustColumnWidth = True 
     .TextFileParseType = xlDelimited 
     .TextFileTextQualifier = xlTextQualifierDoubleQuote 
     .TextFileConsecutiveDelimiter = False 
     .TextFileCommaDelimiter = True 
     ''// This array will need as many entries as there will be columns: 
     .TextFileColumnDataTypes = Array(xlTextFormat, xlTextFormat) 
     .Refresh 
    End With 
End Sub 
5

Код, указанный ниже, позволит пользователю просматривать файл csv.
Это будет тогда:

  • Открыть выбранный файл, обработка данных в виде текста
  • Изменения размеров столбцов
  • Переместить данные в книгу, из которой запускается код.

Код .opentext нуждается в обновлении в зависимости от количества столбцов в исходных данных.

Sub ImportCSV() 

Dim vPath As Variant 
Dim wb As Excel.Workbook 
Dim ws As Excel.Worksheet 

Set wb = Excel.ActiveWorkbook 
Set ws = Excel.ActiveSheet 

vPath = Application.GetOpenFilename("CSV (Comma Delimited) (*.csv),*.csv" _ 
, 1, "Select a file", , False) 
''//Show the file open dialog to allow user to select a CSV file 

If vPath = False Then Exit Sub 
''//Exit macro if no file selected 

Workbooks.OpenText Filename:=vPath, Origin:=xlMSDOS, StartRow:=1 _ 
    , DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, Comma:=True _ 
    , FieldInfo:=Array(Array(1, xlTextFormat), Array(2, xlTextFormat), _ 
    Array(3, xlTextFormat)) 
''//The fieldinfo array needs to be extended to match your number of columns 

Columns.EntireColumn.AutoFit 
''//Resize the columns 

Sheets(1).Move Before:=wb.Sheets(1) 
''//Move the data into the Workbook 

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