В Excel, используя VBA - как мне импортировать и вставлять данные из файла с разделителями? (образец кода и данных) - PullRequest
0 голосов
/ 16 декабря 2010

У меня есть настройки листа со следующим VBA:

Sub PrintPDF()

Application.DisplayAlerts = False

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\<insert_username>\Desktop\macro\Book1.pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False _

Application.Quit

End Sub

(который в основном открывает, печатает PDF-файл и закрывает Excel)

Тогда у меня есть этов рабочей книге:

Private Sub Workbook_Open()
Run "PrintPDF"
End Sub 

(который запускает макрос PrintPDF «под нагрузкой» - то есть при первом открытии файла Excel).

ВОПРОС:

Итак, что мне не хватает сейчас, чтобы завершить эту задачу, так это хороший чистый код для импорта файла с разделителями «под нагрузкой» и сопоставления его с фиксированной точкой на одном листе.

Образец данных (сстрока заголовка):

ID<TAB>Name<TAB>Location
1<TAB>John<TAB>US
2<TAB>Mike<TAB>CN
3<TAB>Tom<TAB>CA

Образец строк Excel (после вставки «при загрузке» и сопоставления с ячейками):

<A1>null<B1>null<C1>null<D1>null
<A2>null<B2>ID<C2>Name<D2>Location
<A3>null<B3>1<C3>John<D3>US
<A4>null<B4>2<C4>Mike<D4>CN
<A5>null<B5>3<C5>Tom<D5>CA

(смещение сопоставления данных, поскольку я хотел бы сделатьЯ уверен, что я могу отобразить импортированные данные в любое место файла Excel, если количество строк и столбцов совпадает на обоих концах, оба конца - это файл Excel и файл источника данных с разделителями;-1.)

Если у вас есть вопросы, дайте мне знать.Целевой системой является Windows 7 (Office 2010) или Mac 10.5 (Office 2011) - приведенный выше код предназначен для Windows, но единственное отличие, которое я считаю, - это код имени файла: «C:\Users\<insert_username>\Desktop\macro\Book1.pdf»


ОБНОВЛЕНИЕ:

Вот код, который у меня есть, ничего плохого в этом:

Sub ImportCSV()
'
' ImportCSV Macro
'

'
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C:\Users\<insert_username>\Desktop\macro\sample_pipeline_data.txt", Destination:= _
        Range("$B$2"))
        .Name = "sample_pipeline_data"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 437
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

1 Ответ

0 голосов
/ 21 декабря 2010

VBA опубликован выше в основной части моего вопроса, но простой ответ заключается в том, что вы можете просто записать макрос, используя встроенные функции PDF, чтобы автоматизировать это. Я хотел бы предложить вам протестировать этот марко (или любой марко) на платформах, на которых он будет работать. Например, в приведенном выше коде VBA, созданном с использованием Office 2010 в Windows 7, он не будет работать на Mac 10.5 (Office 2011) без запуска его в отладчике и удаления нескольких атрибутов, которые не поддерживаются в версии Office для Mac (хотя, основываясь на моем тестировании, вполне вероятно, что они не поддерживаются версией Windows, но просто не выдают ошибок.) Если у вас когда-нибудь возникнут вопросы по поводу кода / ответа - просто прокомментируйте и я будем рады предоставить любую дополнительную информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...