首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过python运行vba宏,但是你能在python中添加进度条来测量vba进程吗?

通过python运行vba宏,但是你能在python中添加进度条来测量vba进程吗?
EN

Stack Overflow用户
提问于 2020-08-09 20:56:29
回答 1查看 179关注 0票数 0

我目前正在运行一个使用python的VBA宏,所以我可以自动化一些过程,我目前还使用tqdm在我的其他python代码中添加了一个进程栏,这非常有用。

有没有人知道是否可以运行宏并测量需要多长时间,并使用进程栏来查看我所处的阶段,因为我已经将其设置为在后台运行。代码需要5-6个小时才能运行,所以最好知道我还剩下多少时间。

代码语言:javascript
复制
import xlwings as xw

def run_mac(file_path):
    
    try:
        xl = xw.App(visible=True, add_book=False)
        wb = xl_app.books.open(file_path)

        run_macro = wb.app.macro('lookupLoop.Open_Report')
        run_macro()

        wb.save()
        wb.close()

        xl.quit()

    except Exception as ex:
        template = "An exception of type {0} occurred. Arguments:\n{1!r}"
        error = template.format(type(ex).__name__, ex.args)
        print(error)


run_mac(input('Excel path: '))

这是我为文件传输准备的内容:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-12 17:24:58

我不太了解宏,但基于您之前的一个问题,我实现了一个进度条,以提供有关已传输的文件的信息。

代码语言:javascript
复制
import os
import shutil
import time
import datetime
import tqdm

src = "C:/Users/eldri/OneDrive/Desktop/"
dst = "C:/Users/eldri/OneDrive/Desktop/output"
ext = input("[+] File format: ")  # "txt"
start = input("[+] Date start: ")  # "01/07/2020"
end = input("[+] Date end: ")  # "30/07/2020"


def dateRange(createdDate, startDate, endDate):
    """determines if date is in range"""
    createdDate = datetime.datetime.strptime(createdDate, '%a %b %d %H:%M:%S %Y')
    startDate = datetime.datetime.strptime(startDate, '%d/%m/%Y')
    endDate = datetime. datetime.strptime(endDate, '%d/%m/%Y')
    return startDate < createdDate < endDate


files = os.listdir(src)
numFiles = len(files)
pbar = tqdm.tqdm()
for filename, i in zip(files, tqdm.trange(numFiles-1)):
    print(filename)
    created = time.ctime(os.path.getmtime(src + filename))
    if filename.endswith('.' + ext) and dateRange(created, start, end):
        shutil.copy(src + filename, dst)
        msg = "[+] File transferred " + filename + created
    else:
        msg = "[+] File not transferred " + filename + created
    pbar.set_postfix_str(msg)

print("[+] Transfer complete")

进度条显示100%|██████████| 10/10 [00:50<00:00, 5.00s/it] 10/10是传输的文件数,[00:50<00:00,的格式为[time taken<time remaining,5.00s/it]表示复制一个文件需要多长时间。所有时间都是基于复制文件的平均时间进行估计的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63326599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档