Как извлечь данные из таблицы (без заголовков) и добавить в конец файла CSV (без открытия в Excel, содержит 3,6 млн. Строк) - PullRequest
0 голосов
/ 31 января 2019

Я использую Power Pivot для создания сводной таблицы с подключением данных к CSV-файлу с 3,6 м + строк данных и размером 230 МБ.

Каждый день я добавляю в этот CSV-файл, запуская отчетв формате .xslx (отчет может быть запущен только в этом формате), я хотел бы использовать VBA для автоматизации ежедневного процесса, если это возможно ниже:

  • Удаление заголовков в книге DailyReport.xslx
  • Сохранить как DailyReport.csv
  • Открыть Master.csv в блокноте (Excel открывает только первые 1048576 строк)
  • Скопировать данные из Report.csv (без заголовков в строке 1)
  • Вставить данные в конец Master.csv
  • Открыть PowerPivot.xlsb (Содержит подключение к данным Master.csv)
  • Обновить подключение к данным и сводные таблицы для получения новых данных

Я нашел много макросов VBA, которые могут копировать текст в файл CSV, но большинство либо создают файл CSV, либо записывают в него через Excel, что я не могу сделать из-за превышения ограничения строки в 1048576.

Я знаю, как выбрать данные из моего отчета и преобразовать файл, но не уверен насчет передачи текста в файлах .csv без открытия в Excel через VBA.

Sub DataMerge()

'--------------------------------------------------
'- Title:    Data Merge                           -
'- Purpose:  Merge data (Daily report/Master csv) -
'--------------------------------------------------

' Set example path
Dim ExamplePath As String
ExamplePath = "C:\Exmaple\Path\"

' Set report as variable
Dim rwb As Workbook
Workbooks.Open Filename:=ExamplePath & "Report.xlsx"
Set rwb = Application.Workbooks("Report.xlsx")

' Convert report to csv and set as variable
rwb.SaveAs Filename:=ExamplePath & "Report.csv", FileFormat:=xlCSV, CreateBackup:=False
Dim rcsv As Workbook
Set rcsv = Application.Workbooks("Report.csv")

' Find range and copy data
Dim LastRow As Integer
LastRow = rcsv.Sheets(1).UsedRange.Rows.Count
rcsv.Sheets(1).Range("A2:A" & LastRow).Copy

' Open master csv file as text and paste selection at the bottom of the file and save
'#######################
'Put requested code here
'#######################

' Close report.csv and open file containing data connection
Workbooks("Report.csv").Close SaveChanges:=False
Dim ppwb As Workbook
Workbooks.Open Filename:=ExamplePath & "PowerPivot.xlsb"
Set ppwb = Application.Workbooks("PowerPivot.xlsb")

' Set as variable and refresh
ppwb.RefreshAll ' When refreshed, excel asks to locate text import file.
' Can this be specified through VBA so user does not need to select file?

ppwb.Close SaveChanges:=True

End Sub

Пожалуйста, также см. Комментарий вышев конце моего кода я хотел бы указать способ импорта текстового файла (.csv), который запрашивается у пользователя, но каждый раз он будет основным файлом сохранения, поэтому каждый раз спрашивать, что это пустая тратадля чего-то, что никогда не меняется.

Я обнаружил этот код из другого ответа StackOverflow, который можно использовать как часть для макроса:

Sub ReadCSV()
    Dim MyString As String
    Open "C:\path\text.csv" For Input As #1 ' Open file for input. 
    Do While Not EOF(1) ' Loop until end of file.
        Line Input #1, MyString ' Read a line into variable
        Debug.Print MyString ' Print data to the Immediate window.
    Loop
    Close #1 ' Close file.

End Sub

Источник: Манипулировать / копировать данные .CSV, не открывая файл?

Как я думаю, это откроет файл как текст, а не как файл Excel?(Поправьте меня если я не прав).Я просто не знаю, как манипулировать текстом, чтобы делать то, что мне нужно, в моей ежедневной процедуре, упомянутой в начале моего вопроса.

Я буду очень признателен за любую помощь в решении этой проблемы, заранее спасибо!

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