Python控制Excel自动刷新页面

比如我们有一个待刷新的Excel叫测试.xlsx

这里我们使用python控制Excel的应用来直接刷新相关页面:

  1. 传入的Excel路径需要是完整的路径,否则会提示找不到:pywintypes.com_error: (-2147352567, '发生意外。', (0, 'Microsoft Excel', '抱歉,无法找到 测试.xlsx。是否可能被移动、重命名或删除?', 'xlmain11.chm', 0, -2146827284), None)
  2. 使用wb.RefreshAll()进行刷新,老版本的程序是wb.refresh_all(),而博主测试的时候使用的应该是wb.RefreshAll()这个程序
  3. 刷新结束后等待一些时间,以便给程序更多时间,减少刷新一部分的概率
  4. 最后使用wb.Save()xlApp.Quit()保存并退出,如果意外退出程序而没有运行xlApp.Quit(),需要进入控制台并关闭Excel的进程才行

其中,博主在定时任务中启动这个程序,会报错:pywintypes.com_error: (-2147221008, '尚未调用 CoInitialize。', None, None),为了解决这个问题,在调用Excel.Application前后使用pythoncom(这个是win32com库安装时安装的,可以直接import)把启动的Excel包裹起来:

import pythoncom
pythoncom.CoInitialize()
xlApp = win32com.client.DispatchEx("Excel.Application")
# 对xlApp的各种操作
pythoncom.CoUninitialize()

最后打包成一个函数:

import os
import time
import pythoncom
import win32com.client
from loguru import logger


def refresh_excel(filepath, refresh_sleet=5):
    """刷新文件
    :param filepath:文件名
    :param refresh_sleet:刷新后等待时间(单位秒)
    """
    logger.debug(f"读取文件:{
     filepath}")
    pythoncom.CoInitialize()
    parent = os.path.dirname(os.path.realpath(__file__))  # 确定文件的真实路径
    xlApp = win32com.client.DispatchEx("Excel.Application")
    wb = xlApp.Workbooks.Open(os.path.join(parent, filepath))
    wb.RefreshAll()
    logger.success(f"刷新完成 等待{
     refresh_sleet}s")
    time.sleep(refresh_sleet)
    wb.Save()  # 保存原文件
    xlApp.Quit()
    pythoncom.CoUninitialize()
    logger.debug(f"Excel刷新完成 {
     filepath}")

示例程序

import os
import time
import pythoncom

import win32com.client
from loguru import logger


def refresh_excel(filepath, refresh_sleet=5):
    """刷新文件
    :param filepath:文件名
    :param refresh_sleet:刷新后等待时间(单位秒)
    """
    logger.debug(f"读取文件:{
     filepath}")
    pythoncom.CoInitialize()
    parent = os.path.dirname(os.path.realpath(__file__))  # 确定文件的真实路径
    xlApp = win32com.client.DispatchEx("Excel.Application")
    wb = xlApp.Workbooks.Open(os.path.join(parent, filepath))
    wb.RefreshAll()
    logger.success(f"刷新完成 等待{
     refresh_sleet}s")
    time.sleep(refresh_sleet)
    wb.Save()  # 保存原文件
    xlApp.Quit()
    pythoncom.CoUninitialize()
    logger.debug(f"Excel刷新完成 {
     filepath}")


def main():
    excel = refresh_excel("测试.xlsx")


if __name__ == '__main__':
    main()

刷新后的结果,会在控制台打印如下内容:

2023-12-19 17:03:20.705 | DEBUG    | __main__:refresh_excel:13 - 读取文件:测试.xlsx
2023-12-19 17:03:24.614 | SUCCESS  | __main__:refresh_excel:19 - 刷新完成 等待5s
2023-12-19 17:03:29.667 | DEBUG    | __main__:refresh_excel:23 - Excel刷新完成 测试.xlsx

相关推荐

  1. Python控制Excel自动刷新页面

    2023-12-21 05:44:01       51 阅读
  2. jsp+ajax自动刷新局部页面

    2023-12-21 05:44:01       54 阅读
  3. Python自动打开Excel文件

    2023-12-21 05:44:01       38 阅读
  4. python实现excel数据自动统计

    2023-12-21 05:44:01       26 阅读
  5. 如何做到页面实时刷新

    2023-12-21 05:44:01       52 阅读
  6. HTML页面定时刷新指南

    2023-12-21 05:44:01       25 阅读
  7. uniapp刷新当前页面bug

    2023-12-21 05:44:01       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-21 05:44:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-21 05:44:01       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-21 05:44:01       82 阅读
  4. Python语言-面向对象

    2023-12-21 05:44:01       91 阅读

热门阅读

  1. 怎么防护服务器不被入侵

    2023-12-21 05:44:01       49 阅读
  2. MVC框架和Spring MVC的基本流程

    2023-12-21 05:44:01       58 阅读
  3. 华为云Stack 8.X 流量模型分析(一)

    2023-12-21 05:44:01       53 阅读
  4. 解决 MATLAB 启动速度慢的问题

    2023-12-21 05:44:01       97 阅读
  5. 第二十一章 : Spring Boot 集成RabbitMQ(五)

    2023-12-21 05:44:01       45 阅读
  6. Pytorch读写张量文件

    2023-12-21 05:44:01       73 阅读
  7. 基于redis的分布式锁实现方案

    2023-12-21 05:44:01       64 阅读
  8. python3 自定义比较器/比较函数

    2023-12-21 05:44:01       65 阅读