Python使用win32com.client()和load_workbook()追加写入excle

2023-11-07

win32com.client()和load_workbook()均可以实现在原有excle文件中写入内容,在实际使用中win32com.client()使用的方法类似VBA来模拟用户进行操作,运行速度不如load_workbook()。

1.win32com.client()写入excle

win32com.client在操作完excle后一般要及时关闭

所以wb.close()是必须的

import win32com.client as win32

allow_time_maxrows_flag = 3  #行数指针

excel = win32.DispatchEx('Excel.Application')  # 这个是必备的,
excel.Visible = False  # 是否可视化
excel.DisplayAlerts = False  # 禁止弹窗-不显示警告信息
wb = excel.Workbooks.Open(r"D:\Users\WYN\Desktop\Demo2\Data\06Cr19Ni10_t=1_DZ111\06Cr19Ni10_t=1_DZ111.xlsx",
                          ReadOnly=False)
ws = wb.Worksheets[0]  # sheet表名:wb.Sheets[0].Name
ws.Cells((allow_time_maxrows_flag[row_name] + 3), 1).Value = tableData_read.iloc[row_name, 0]
ws.Cells((allow_time_maxrows_flag[row_name] + 3), 2).Value = "\n".join(
    [str(tableData_read.iloc[row_name, 1]), str(tableData_read.iloc[row_name, 2])])
ws.Cells((allow_time_maxrows_flag[row_name] + 3), 3).Value = tableData_read.iloc[row_name, 3]
ws.Cells((allow_time_maxrows_flag[row_name] + 3), 4).Value = tableData_read.iloc[row_name, 4]
ws.Cells((allow_time_maxrows_flag[row_name] + 3), 5).Value = tableData_read.iloc[row_name, 5]
ws.Cells((allow_time_maxrows_flag[row_name] + 3), 6).Value = tableData_read.iloc[row_name, 6]
ws.Cells((allow_time_maxrows_flag[row_name] + 3), 7).Value = tableData_read.iloc[row_name, 7]
ws.PageSetup.PrintArea = 'A1:H%s' % (allow_time_maxrows_flag[row_name] + 3)  # 设置打印区域

wb.Save()  # 保存
wb.SaveAs(r"D:\Users\WYN\Desktop\Demo2\Data\06Cr19Ni10_t=1_DZ111\aaa.xls")  # 另存为

wb.Close(False)  # 关闭,如果你想看到excel温馨的提示,括号里就别填东西
excel.quit()  # 关闭excle操作环境

2.load_workbook()写入excle

openpyxl有workbook()和load_workbook()两种方法写入excle。workbook()用于创建新的excle,load_workbook()适用于在原有的excle文件中操作。

两种方法区别如下图

import openpyxl

workbook = openpyxl.load_workbook(path_name_cailiao_path_list[row_name])  # 这里用的相对路径,这是workbook,工作簿
worksheet = workbook[workbook.sheetnames[0]]  # 获得工作簿的所有工作表,将第一个工作表作为工作地
worksheet.cell(row=(allow_time_maxrows_flag[row_name] + 3), column=1, value=tableData_read.iloc[row_name, 0])
worksheet.cell(row=(allow_time_maxrows_flag[row_name] + 3), column=2,
               value="\n".join([str(tableData_read.iloc[row_name, 1]), str(tableData_read.iloc[row_name, 2])]))
worksheet.cell(row=(allow_time_maxrows_flag[row_name] + 3), column=3, value=tableData_read.iloc[row_name, 3])
worksheet.cell(row=(allow_time_maxrows_flag[row_name] + 3), column=4, value=tableData_read.iloc[row_name, 4])
worksheet.cell(row=(allow_time_maxrows_flag[row_name] + 3), column=5, value=tableData_read.iloc[row_name, 5])
worksheet.cell(row=(allow_time_maxrows_flag[row_name] + 3), column=6, value=tableData_read.iloc[row_name, 6])
worksheet.cell(row=(allow_time_maxrows_flag[row_name] + 3), column=7, value=tableData_read.iloc[row_name, 7])
worksheet.print_area = 'A1:H%s' % (allow_time_maxrows_flag[row_name] + 3)  # 设置打印区域
workbook.save(path_name_cailiao_path_list[row_name])

3.使用win32com.client()写入excle时excle进程不能关闭的解决方法

def close_excel_by_force(self, excel):
    import win32process
    import win32gui
    import win32api
    import win32con
    import time

    # Get the window's process id's
    hwnd = excel.Hwnd
    t, p = win32process.GetWindowThreadProcessId(hwnd)
    # 可以去掉 nicely to close 和 time.sleep 两步,直接 force close
    # Ask window nicely to close
    win32gui.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0)
    # Allow some time for app to close
    time.sleep(10)
    # If the application didn't close, force close
    try:
        handle = win32api.OpenProcess(win32con.PROCESS_TERMINATE, 0, p)
        if handle:
            win32api.TerminateProcess(handle, 0)
            win32api.CloseHandle(handle)
    except:
        pass

在执行完此函数后,可以删除excle

# 删除读取是创建的excle
del excle

参考连接:

(13 封私信 / 24 条消息) py的openpyxl库,load_workbook()和Workbook()有什么不一样? - 知乎 (zhihu.com)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python使用win32com.client()和load_workbook()追加写入excle 的相关文章

随机推荐

  • python smtplib.SMTP_SS发邮件提示550, b‘The “From“ header is missing or invalid

    发现网站不能注册新用户 报错提示 550 b The From header is missing or invalid Please follow RFC5322 RFC2047 RFC822 standard protocol http
  • React Native - Image组件的使用详解(加载资源、网络、本地图片)

    原文地址 http www hangge com blog cache detail 1542 html 一 Image组件介绍 同 HTML 的 img 元素一样 React Native 提供的 Image 组件可以用来显示各种途径的图
  • C. Bricks and Bags Codeforces Round #831 (Div. 1 + Div. 2)

    在经历了几天的卡题和没思路 看题解没看懂中终于把这一道题给磕了出来 感觉这题做不出的原因的没有想好极值的处理关系和太看重特殊情况而忽略了一般情况 传送门 题目 有A和B两个人 给你n个石头和3个袋子w1 w2 w3 每个石头都有自己的值 现
  • win10下安装Pytorch (CUDA9.1+CUDNN7.0)

    一 CUDA 下载地址 直接搜索便可找到 我下载的是9 1版本的 安装步骤 1 点击cuda 9 1 85 win10 exe安装 2 按顺序同意就好 3 完成 得到如下两个图标 4 官网下载时还有以下三个patch 反正我又顺次点开安装了
  • Mac 安装/更换node版本命令(值得收藏)

    Mac 安装 更换node版本命令 收集node指令 方便查找 在mac终端里面输入如下指令 全局安装n模块 sudo npm install n g 更新npm到最新版本 sudo npm install npm latest g 安装当
  • c++学习之多态

    多态分为两类 1 静态多态 函数重载和运算符重载属于静态多态 复用函数名 2 动态多态 派生类和虚函数实现运行时多态 静态多态和动态多态的区别 1 静态多态的函数地址早绑定 编译阶段确定函数地址 2 动态多态的函数地址晚绑定 运行阶段确定函
  • Cygwin环境变量设置(转载)

    开始运行bash之前 应该设置一些环境变量 cygwin提供了一个 bat文件 里面已经设置好了最重要的环境变量 通过它来启动bash是最安全的办法 这个 bat文件安装在cygwin所在的根目录下 可以随意编辑该文件 1 CYGWIN变量
  • java+selenium+new——杀掉windows的浏览器进程

    package rjcs import java util List import org openqa selenium os WindowsUtils import org openqa selenium By import org o
  • Shell脚本入门 01:格式与基础使用

    文章目录 目的 脚本格式 脚本使用 exit 命令 read 命令 组命令 总结 目的 通常在终端中操作Linux都是一行一行输入命令进行的 每输入一行执行后根据结果再输入下一条命令 这种操作在简单使用或是在单次使用中没什么问题 但是如果需
  • C语言赋值被截断,c语言中赋值截断

    在c语言中进行变量赋值的时候 如果将字节多的数据类型赋给一个占字节少的变量类型 会发生 截断 发生这种情况的原因是 在赋值过程中只将占字节较长的变量的地位赋给占字节较少的变量 如 int i 345 char c i c i 在进行c i赋
  • 区块链全节点与区块链轻节点的区别

    随着技术的发展更新 区块链上的交易也将日益增多 这也间接造成了区块链开发的数据容量越来越大 因为区块链的冗余备份 要求所有节点都需保存全量的数据文件 在这个节点间 假设有用户用自己创建一个区块链节点来进行DApp的开发 可又不想参与共识 那
  • 多智能体强化学习与博弈论-博弈论基础4

    多智能体强化学习与博弈论 博弈论基础4 本篇文章主要讲的是贝叶斯博弈 Bayesian Games 也称作不完全信息博弈 和拍卖理论 不完全信息博弈在我们生活中经常出现 比如拍卖 在市场和别人讨价还价等等 贝叶斯博弈 首先举一个贝叶斯博弈的
  • Spring声明式事务@Transactional传播行为

    在 Transactional注解中 可以propagation属性用来配置事务传播 支持7种不同的传播机制 REQUIRED 业务方法需要在一个事务中运行 如果方法运行时 已处在一个事务中 那么就加入该事务 否则自己创建一个新的事务 这是
  • js键盘移动事件

    keyboard box move
  • 第十三届蓝桥杯省赛Java A 组 F 题、Python A 组 G 题、Python B 组 G题——全排列的价值 (AC)

    目录 1 全排列的价值 1 题目描述 2 输入格式 3 输出格式 4 样例输入1 5 样例输出2 6 样例输出1 7 样例输出2 8 样例解释 9 原题链接 2 解题思路 3 Ac code 1 全排列的价值 1 题目描述 对于一个排列 A
  • GitHub Desktop官方下载链接

    Github Desktop官方下载 点击直达 https desktop github com
  • 云服务器vCPU与物理CPU关系

    CPU个数 看得见摸得找的CPU个数 插在主版上面的 在linux系统下面的 proc cpuinfo文件的条目中 有多少个不同的physical id就有多少个物理CPU CPU物理核 一个CPU可能有多个核 在linux系统下面的 pr
  • Android应用程序资源的查找过程分析

    我们知道 在Android系统中 每一个应用程序一般都会配置很多资源 用来适配不同密度 大小和方向的屏幕 以及适配不同的国家 地区和语言等等 这些资源是在应用程序运行时自动根据设备的当前配置信息进行适配的 这也就是说 给定一个相同的资源ID
  • 京东面试:如何实现分布式锁?

    案例背景 分布式锁是解决协调分布式系统之间 同步访问共享资源的一种方式 详细来讲 在分布式环境下 多个系统在同时操作共享资源 如写数据 时 发起操作的系统通常会通过一种方式去协调其他系统 然后获取访问权限 得到访问权限后才可以写入数据 其他
  • Python使用win32com.client()和load_workbook()追加写入excle

    win32com client 和load workbook 均可以实现在原有excle文件中写入内容 在实际使用中win32com client 使用的方法类似VBA来模拟用户进行操作 运行速度不如load workbook 1 win3