帮我使用Python openpyxl实现对同一excel文件中a列,b列是否相同进行检测,并用黄颜色标记出不同项,并保存为新的文件,程序带PySimpleGUI
时间: 2023-06-13 12:02:18 浏览: 182
python对excel的操作之openpyxl
好的,让我们一步一步来实现这个功能。
首先,我们需要安装 `openpyxl` 和 `PySimpleGUI` 包。可以在命令行中使用以下命令进行安装:
```
pip install openpyxl
pip install PySimpleGUI
```
然后,我们需要创建一个 GUI 界面,让用户可以选择要检测的 Excel 文件。这里我们使用 PySimpleGUI 来创建一个简单的界面:
```python
import PySimpleGUI as sg
layout = [
[sg.Text("选择要检测的Excel文件:")],
[sg.Input(key="-FILE-"), sg.FileBrowse()],
[sg.Button("开始检测")]
]
window = sg.Window("Excel检测工具", layout)
```
接下来,我们需要在用户点击“开始检测”按钮时,打开并读取 Excel 文件,并对每一行的 A 列和 B 列进行比较,如果不同,则将该行标记为黄色。最后,将修改后的 Excel 文件另存为一个新文件。我们可以使用 `openpyxl` 库来实现这一功能。
```python
import openpyxl
from openpyxl.styles import PatternFill
from openpyxl.utils import get_column_letter
# 定义黄色填充样式
yellow_fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")
# 获取用户选择的文件路径
file_path = values["-FILE-"]
# 打开 Excel 文件
wb = openpyxl.load_workbook(file_path)
# 获取第一个工作表
ws = wb.active
# 遍历每一行
for row in ws.iter_rows(min_row=2):
# 获取 A 列和 B 列的值
a_value = row[0].value
b_value = row[1].value
# 如果 A 列和 B 列的值不同,将该行标记为黄色
if a_value != b_value:
for cell in row:
cell.fill = yellow_fill
# 将修改后的 Excel 文件另存为一个新文件
new_file_path = file_path.split(".")[0] + "_new.xlsx"
wb.save(new_file_path)
```
最后,我们可以将上述代码加入到 GUI 界面的按钮回调函数中,完整的代码如下:
```python
import PySimpleGUI as sg
import openpyxl
from openpyxl.styles import PatternFill
from openpyxl.utils import get_column_letter
# 定义黄色填充样式
yellow_fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")
# 定义界面布局
layout = [
[sg.Text("选择要检测的Excel文件:")],
[sg.Input(key="-FILE-"), sg.FileBrowse()],
[sg.Button("开始检测")]
]
# 创建窗口
window = sg.Window("Excel检测工具", layout)
while True:
event, values = window.read()
if event == sg.WINDOW_CLOSED:
break
elif event == "开始检测":
# 获取用户选择的文件路径
file_path = values["-FILE-"]
# 打开 Excel 文件
wb = openpyxl.load_workbook(file_path)
# 获取第一个工作表
ws = wb.active
# 遍历每一行
for row in ws.iter_rows(min_row=2):
# 获取 A 列和 B 列的值
a_value = row[0].value
b_value = row[1].value
# 如果 A 列和 B 列的值不同,将该行标记为黄色
if a_value != b_value:
for cell in row:
cell.fill = yellow_fill
# 将修改后的 Excel 文件另存为一个新文件
new_file_path = file_path.split(".")[0] + "_new.xlsx"
wb.save(new_file_path)
sg.popup(f"检测完成,已保存为新文件:{new_file_path}")
```
阅读全文