win32com python 操作wps 解决修改 表格触发关闭 其他excel的功能

news/2024/12/2 13:44:17/

win32com python 操作wps 是很方便的一个东西
之前唯一的缺点就是会关闭wps的表格。
解决思路
新开wps 进程来处理

python">import os
import subprocess
import win32com.client as win32
import timedata = []
def get_col_value(sheet):# 参数设置row_index = 2  # 第二行start_column = 6  # F 列是第 6 列start_row = 6  # 从第 6 行开始# 获取最后一列和最后一行last_column = sheet.UsedRange.Columns.Countlast_row = sheet.UsedRange.Rows.Count# 存储数据for col in range(start_column, last_column + 1):# 检查当前列第 6 行及其以下是否有数据has_data_below = any(sheet.Cells(row, col).Value is not None for row in range(start_row, last_row + 1))if has_data_below:  # 如果列第 6 行以下有数据second_row_value = sheet.Cells(row_index, col).Value  # 获取第二行的值# 获取第 6 行及其以下的非空值及对应行号column_values_with_rows = [{"row": row, "value": sheet.Cells(row, col).Value}for row in range(start_row, last_row + 1)if sheet.Cells(row, col).Value is not None]column_letter = sheet.Cells(1, col).Address.split('$')[1]  # 获取列字母data.append({"column": column_letter,"second_row_value": second_row_value,"values_from_6th_row": column_values_with_rows,})def get_all_excel_files(directory):"""获取指定目录及其子目录中的所有 Excel 文件"""excel_files = []for root, _, files in os.walk(directory):for file in files:if file.endswith(('.xls', '.xlsx')):excel_files.append(os.path.join(root, file))return excel_filesclass WPS_handle:def get_curr_path(self):# 获取当前脚本所在目录的绝对路径current_dir = os.path.abspath(os.getcwd())# 获取所有 Excel 文件all_excel_files = get_all_excel_files('数据源')file_path = all_excel_files[0]self.root_padth = f'{current_dir}\\{file_path}'def get_wps_path(self):for root, dirs, files in os.walk("C:/"):if "wps.exe" in files:self.wps_padth = os.path.join(root, "wps.exe")return Truereturn Falsedef run_wps_processes(self):# 启动多个独立的 WPS 进程num_instances = 1  # 启动 1 个 WPS 实例# 启动每个进程并打开文件process = subprocess.Popen([self.wps_padth])  # 启动一个新的 WPS 进程self.app = win32.Dispatch("ket.Application")time.sleep(3)# 使用 COM 接口连接到每个 WPS 实例def handle_wps(self):# 打开不同的文件并显示在不同的窗口中try:file_paths = self.root_padthself.app.Visible = True  # 设置为可见,以显示 WPS 窗口# 打开不同的工作簿workbook = self.app.Workbooks.Open(file_paths)worksheet = workbook.Worksheets('Sheet1')worksheet_2 = workbook.Worksheets('Sheet2')worksheet_2.Cells(1, 1).Value = "姓名"worksheet_2.Cells(1, 2).Value = "实动工时"worksheet_2.Cells(1, 3).Value = "工事代码"worksheet_2.Cells(1, 4).Value = "分段"worksheet_2.Cells(1, 5).Value = "班组"worksheet_2.Cells(1, 6).Value = "日期"worksheet_2.Cells(1, 7).Value = "船号"date = worksheet.Cells(2, 2).Valueclass_ = worksheet.Cells(2, 4).Valueget_col_value(worksheet)star_row = 2for item in data:for n in item['values_from_6th_row']:worksheet_2.Cells(star_row, 1).Value = item['second_row_value']worksheet_2.Cells(star_row, 2).Value = n['value']worksheet_2.Cells(star_row, 3).Value = worksheet.Cells(n['row'], 5).Valueworksheet_2.Cells(star_row, 4).Value = worksheet.Cells(n['row'], 2).Valueworksheet_2.Cells(star_row, 5).Value = class_worksheet_2.Cells(star_row, 6).Value = dateworksheet_2.Cells(star_row, 7).Value = worksheet.Cells(n['row'], 1).Valuestar_row+= 1# 保存更改workbook.Save()# 关闭工作簿workbook.Close(SaveChanges=True)except Exception as e:print(f"发生错误: {e}")finally:# 退出每个 WPS 实例# app.Quit()del self.app# 结束所有启动的进程# for process in processes:#     process.terminate()print("操作完成")def __init__(self):self.root_padth = ''self.wps_padth = ''self.app = ''self.get_curr_path()self.get_wps_path()if self.wps_padth:print(f"找到 WPS 路径:{self.wps_padth}")else:print("未找到 WPS 安装路径")self.run_wps_processes()self.handle_wps()if __name__ == "__main__":WPS_handle()

http://www.ppmy.cn/news/1551769.html

相关文章

记一次搞校园网的经历

接教室的校园网,到另一个屋子玩电脑,隔墙想放大一下AP的信号,发现死活不行 这是现状 由于校园网认证的存在,无法用桥接,桥接需要路由器有IP,而这个IP无法用未刷机的路由器来打开校园网页面认证 解决 将一…

Windows 服务器虚拟化技术详解

一、什么是 Windows 服务器虚拟化? Windows 服务器虚拟化是指通过虚拟化技术在一台物理服务器上运行多个虚拟机(VMs)。这些虚拟机(VMs)能够独立运行不同的操作系统、应用程序和服务。虚拟化技术允许多台虚拟机共享物理…

嵌入式Linux中常用的文件系统类型

嵌入式Linux系统中使用的文件系统类型多种多样,每种都有其特点和适用场景。以下是几种常见的嵌入式Linux文件系统类型及其特性: 只读压缩文件系统 SquashFS:一种高度压缩的只读文件系统,适合用于固件映像,它能够提供高…

C# 13 中的新增功能

C# 12 中的新增功能C# 11 中的新增功能C# 10 中的新增功能C# 9.0 中的新增功能C# 8.0 中的新增功能C#7.0中有哪些新特性?C#6.0中10大新特性的应用和总结C# 5.0五大新特性 将C#语言版本升级为预览版 C# 13 包括一些新增功能。 可以使用最新的 Visual Stu…

存储结构及关系(一)

学习目标 描述数据库的逻辑结构列出段类型及其用途列出控制块空间使用的关键字获取存储结构信息 段的类型 段是数据库中占用空间的对象。它们使用数据库数据文件中的空间。介绍不同类型的段。 表 表是在数据库中存储数据的最常用方法。表段用于存储既没有集群也没有分区的表…

Python 中的 Lxml 库与 XPath 用法

Python 中的 Lxml 库与 XPath 用法 Python 中的 Lxml 库与 XPath 用法Lxml安装 Lxml基础用法加载文档解析与查询创建新的 XML/HTML 高级特性1. 复杂的 XPath 查询2. DTD 和 Schema 验证3. XSLT 变换4. 自定义命名空间5. 异常处理6. 大文件流式处理7. 并发和线程安全性8. 性能优…

vscode的markdown扩展问题

使用vscode编辑markdown文本时,我是用的是Office Viewer(Markdown Editor)这个插件 今天突然发现不能用了,点击切换编辑视图按钮时会弹出报错信息: command office.markdown.switch not found 在网上找了很久发现没有有关这个插件的文章………

后端 Java发送邮件 JavaMail 模版 20241128测试可用

配置授权码 依赖 <dependency><groupId>javax.mail</groupId><artifactId>javax.mail-api</artifactId><version>1.5.5</version> </dependency> <dependency><groupId>com.sun.mail</groupId><artifa…