Ускорьте 10-кратное копирование рабочего листа с 100 тыс. Строк в текущую рабочую книгу. - PullRequest
0 голосов
/ 02 мая 2020

Я знаю, что об этом можно было спросить сто раз, но есть ли способ действительно ускорить мой код еще быстрее, может быть, в 10 раз быстрее? Я открыт для Python -Excel коды и т. Д. c.

Это может быть другой вопрос, потому что я не просто ограничиваю себя простым VBA.

Код:

    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlManual

    Dim wb_raw As Workbook
    Set wb_raw = Workbooks.Open("C:\Projects\Raw.xlsx")

    wb_raw.Worksheets(1).Copy Before:=ThisWorkbook.Worksheets(2)
    ' the worksheet being copied has 100k rows

    wb_raw.Close

    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.Calculation = xlAutomatic

Я также открыт для PowerQuery, а затем обновите маршрут sh.

1 Ответ

1 голос
/ 04 мая 2020

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

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

Если вы можете сделать копию, пока рабочая книга закрыта, возможно, pyopenxl или xlrd и xlwrt могли бы сделать это. Оба из них могут копировать значения и формулы, но ни одно из этих решений не может оценить формулы, но это звучит нормально из вашего описания.

Если вам нужно, чтобы рабочая книга была открыта во время копирования или перемещения, есть некоторые отличные решения, которые объединяют Python и Excel, используя COM. xlwings , PyXll , FlyingKoala и DataNitro. С помощью этих решений вы можете написать некоторый код Python, который делает копию. Если вам просто нужны значения, вы можете использовать кадры данных для перемещения данных.

Я использовал только xlwings (и [FlyingKoala] - который использует xlwings). xlwings упрощает двустороннюю связь между Python и Excel, поэтому вы можете звонить Python из Excel и вызывать Excel (включая VBA) из Python. Этот метод может быть полезен для ускорения операций, особенно в отчетах и ​​моделировании.

PyXll и FlyingKoala имеют дополнительное преимущество, поскольку они могут читать формулы Excel и преобразовывать их в код Python, затем выполните (оцените) динамически сгенерированный код Python.

Пример использования xlwings только для копирования значений. Я использовал это для копирования 100 000 строк с 26 столбцами (от A до Z), и это заняло 17 секунд;

import xlwings as xw
import numpy as np

@xw.func
@xw.arg('range_to_copy', np.array, doc='')
@xw.ret(index=False, header=False, expand='table')
def copy_values(range_to_copy):

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