Я пытаюсь создать базу данных из документов SEC. Заявки поступают в виде файлов .tsv и структурированы по папкам по годам и кварталам. Папка Ever содержит около 20 файлов .tsv, которые я хотел бы импортировать в Excel или Access (в зависимости от того, что более возможно). Каждый файл представляет собой одну таблицу.
Вместо того, чтобы импортировать каждый отдельный файл, есть ли способ импортировать их все одновременно? Или хотя бы все файлы одной папки одновременно?
Есть ли уже реализованная функция или мне нужно использовать Python, макрос Excel и т. д.?
Поскольку данные разделены табуляцией, а не запятой, DoCmd.TransferText может не работать. Таким образом, варианты будут заключаться в том, чтобы установить ссылку на каждую таблицу и импортировать с вкладкой, определенной как разделитель, или использовать код манипулирования текстовым файлом. Независимо от метода импорта, сначала разберитесь с зацикливанием файла. Есть несколько способов сделать это. Один использует FileSystemObject, а другой использует Dir() stackoverflow.com/questions/10380312/…
И чтобы зациклить папку и подпапки, просмотрите allenbrowne.com/ser-59.html
Добро пожаловать в СО! В общем, этот форум предназначен для ответов на конкретные вопросы, основанные на том, что пробовал ты. Рекомендуется изучить темы и попробовать сначала.
Это не полное решение, ваш вопрос недостаточно конкретен.
Но вы должны быть в состоянии построить на этом образце. Практически просто укажите метод цикла файлов и отслеживайте, где каждый из файлов находится на вашем листе.
ПРИМЕЧАНИЕ. Конечно, есть много других способов сделать то же самое. Это показывает способ сделать это автоматически из Excel.
Datafile sample: (assume TAB separated)
--------------------
H1 H2 H3
T1 T2 T3
F1 F2 F3
Этот код читает файл и импортирует так, чтобы C1R1 была текущей ячейкой.
Option Explicit
'
' sub to do import.
' Make a loop here using list of files
'
Sub TestImport()
Call ImportTextFile("c:\Temp\excelimport.txt", vbTab, ActiveCell)
End Sub
'
' function to import
'
Public Sub ImportTextFile(strFileName As String, strSeparator As String, rngTgt As Range)
Dim strWholeLine As String
Dim rw As Long, col As Long
Dim i As Long, j As Long, ary() As String, a As Variant
Dim wks As Worksheet
Set wks = rngTgt.Parent
Open strFileName For Input Access Read As #1
rw = rngTgt.Row
col = rngTgt.Column
i = rw
Do While Not EOF(1)
Line Input #1, strWholeLine
ary = Split(strWholeLine, strSeparator)
j = col
For Each a In ary
Cells(i, j).Value = a
j = j + 1
Next a
i = i + 1
Loop
Close 1
Set wks = Nothing
End Sub
Благодарю вас! Я понимаю, что мне еще многое предстоит узнать и выяснить, чтобы задавать более конкретные вопросы. Я ценю ваш ответ!
Конечно, VBA может перебирать файлы в папке. Общая тема. Проведите исследование, попробуйте код и, когда у вас возникнет конкретная проблема, отправьте вопрос.