鱼C论坛

 找回密码
 立即注册
查看: 3723|回复: 14

[已解决]求助:excel判断两列数据是否相等,不相等将不同的单元格用颜色区分

[复制链接]
发表于 2023-4-17 17:42:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如题,如何判断单元格第二行开始第二列和第三列的数据是否相同,不同则将第三列相应的单元格背景置黄处理
希望将判断写到第三列的单元格的公式中,生成的excel一修改第三列就和第二列对比开始置黄

最佳答案
2023-4-17 17:42:31
本帖最后由 歌者文明清理员 于 2023-4-17 17:45 编辑

以下是使用Python的Openpyxl模块实现您要求的功能的示例代码:
  1. import openpyxl
  2. from openpyxl.styles import PatternFill

  3. # 打开Excel文件并选择工作表
  4. wb = openpyxl.load_workbook('example.xlsx')
  5. ws = wb.active

  6. # 获取第二列和第三列数据的最大行数
  7. max_row = ws.max_row

  8. # 对每一行进行比较,并将不同的单元格用黄色填充
  9. for row in range(2, max_row + 1):
  10.     if ws.cell(row=row, column=2).value != ws.cell(row=row, column=3).value:
  11.         # 设置相应单元格的背景颜色为黄色
  12.         cell_fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
  13.         ws.cell(row=row, column=3).fill = cell_fill

  14. # 保存更改后的Excel文件
  15. wb.save('example.xlsx')
复制代码
这段代码会打开指定的Excel文件,并在其中选择活动工作表。随后,它会检查第二列和第三列的数据是否相等,并将不同的单元格用黄色填充。最后,它会将更改后的Excel文件保存回磁盘。注意,这段代码并没有使用公式来完成要求的功能,而是遍历了所有行并逐个比较单元格的值。


                               
登录/注册后可看大图
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-4-17 17:42:31 | 显示全部楼层    本楼为最佳答案   
本帖最后由 歌者文明清理员 于 2023-4-17 17:45 编辑

以下是使用Python的Openpyxl模块实现您要求的功能的示例代码:
  1. import openpyxl
  2. from openpyxl.styles import PatternFill

  3. # 打开Excel文件并选择工作表
  4. wb = openpyxl.load_workbook('example.xlsx')
  5. ws = wb.active

  6. # 获取第二列和第三列数据的最大行数
  7. max_row = ws.max_row

  8. # 对每一行进行比较,并将不同的单元格用黄色填充
  9. for row in range(2, max_row + 1):
  10.     if ws.cell(row=row, column=2).value != ws.cell(row=row, column=3).value:
  11.         # 设置相应单元格的背景颜色为黄色
  12.         cell_fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
  13.         ws.cell(row=row, column=3).fill = cell_fill

  14. # 保存更改后的Excel文件
  15. wb.save('example.xlsx')
复制代码
这段代码会打开指定的Excel文件,并在其中选择活动工作表。随后,它会检查第二列和第三列的数据是否相等,并将不同的单元格用黄色填充。最后,它会将更改后的Excel文件保存回磁盘。注意,这段代码并没有使用公式来完成要求的功能,而是遍历了所有行并逐个比较单元格的值。


                               
登录/注册后可看大图
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-17 17:42:38 | 显示全部楼层
python版本3.11.2
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-17 17:46:00 | 显示全部楼层

以上代码在Python3.11.2中应该是可以正常运行的,因为Openpyxl模块支持Python 3.x版本,并且该代码没有使用任何2.x 版本已弃用的功能或语法。但是请务必确认您已经安装了Openpyxl模块并导入了相关库文件,否则代码可能无法正常执行。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-17 17:47:24 | 显示全部楼层
要在Python中使用Excel,可以使用 openpyxl 这个库。首先,你需要确保你已经安装了 openpyxl。如果还没有安装,可以通过以下命令安装:

  1. pip install openpyxl
复制代码


以下是一个示例代码,演示如何使用 openpyxl 判断两列数据是否相等,如果不相等则将不同的单元格背景置黄:

  1. import openpyxl
  2. from openpyxl.styles import PatternFill

  3. # 打开工作簿和工作表
  4. workbook = openpyxl.load_workbook('your_excel_file.xlsx')
  5. worksheet = workbook.active

  6. # 设置填充颜色为黄色
  7. yellow_fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")

  8. # 从第二行开始遍历工作表中的行
  9. for row in worksheet.iter_rows(min_row=2):
  10.     cell2 = row[1]  # 第二列的单元格
  11.     cell3 = row[2]  # 第三列的单元格

  12.     # 如果第二列和第三列的数据不相等,则将第三列的单元格背景设置为黄色
  13.     if cell2.value != cell3.value:
  14.         cell3.fill = yellow_fill

  15. # 保存更改后的工作簿
  16. workbook.save('your_modified_excel_file.xlsx')
复制代码


请将 'your_excel_file.xlsx' 替换为你的实际Excel文件名,将 'your_modified_excel_file.xlsx' 替换为你希望保存的新Excel文件名。

该代码将会遍历Excel中的每一行(从第二行开始),比较第二列和第三列的值,如果不相等,就将第三列的单元格背景颜色设为黄色。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-17 17:51:06 | 显示全部楼层
您可以尝试使用Python的openpyxl模块来进行单元格的比较和背景色设置。

以下是示例代码,其中假设您要处理的Excel文件名为“example.xlsx”,列名为A、B和C,且从第二行开始存在数据。请先确保安装了openpyxl模块。

  1. from openpyxl import load_workbook
  2. from openpyxl.styles import PatternFill

  3. # 打开Excel文件
  4. wb = load_workbook('example.xlsx')

  5. # 选择当前活动工作表(可以根据需要修改)
  6. ws = wb.active

  7. # 定义黄色填充
  8. yellow_fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")

  9. # 遍历第二行及以后的所有行
  10. for row in range(2, ws.max_row+1):
  11.     # 获取第二列和第三列的单元格
  12.     cell_b = ws.cell(row=row, column=2)
  13.     cell_c = ws.cell(row=row, column=3)
  14.     # 如果它们不相同
  15.     if cell_b.value != cell_c.value:
  16.         # 将第三列的背景色改为黄色
  17.         cell_c.fill = yellow_fill

  18. # 保存Excel文件
  19. wb.save('example.xlsx')
复制代码


在上述代码中,我们首先打开了Excel文件,并选择了活动工作表。然后,我们定义了一个黄色填充来表示需要置黄的单元格。接下来,我们遍历第二行及以后的所有行,并分别获取第二列和第三列的单元格。如果这两个单元格的值不相同,我们就将第三列的背景色改为黄色。

最后,我们保存了Excel文件。请注意,如果您需要处理多个工作表或多个Excel文件,可以使用其他openpyxl模块中的方法来选择和打开不同的工作表和文件。
有用请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-17 19:51:52 | 显示全部楼层
sfqxx 发表于 2023-4-17 17:51
您可以尝试使用Python的openpyxl模块来进行单元格的比较和背景色设置。

以下是示例代码,其中假设您要处 ...

我要的是把这个判断加到excel第三列的公式,就是原本2列和3列是相同的,我打开excel一旦修改了3列的某个值,就将单元格置黄,能做到不
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2023-4-17 19:52:05 | 显示全部楼层
isdkz 发表于 2023-4-17 17:47
要在Python中使用Excel,可以使用 openpyxl 这个库。首先,你需要确保你已经安装了 openpyxl。如果还没有安 ...

我要的是把这个判断加到excel第三列的公式,就是原本2列和3列是相同的,我打开excel一旦修改了3列的某个值,就将单元格置黄,能做到不
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-17 19:52:39 | 显示全部楼层
歌者文明清理员 发表于 2023-4-17 17:42
以下是使用Python的Openpyxl模块实现您要求的功能的示例代码:
这段代码会打开指定的Excel文件,并在其中 ...

我要的是把这个判断加到excel第三列的公式,就是原本2列和3列是相同的,我打开excel一旦修改了3列的某个值,就将单元格置黄,能做到不
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-17 19:57:12 | 显示全部楼层
liyuping-fisher 发表于 2023-4-17 19:52
我要的是把这个判断加到excel第三列的公式,就是原本2列和3列是相同的,我打开excel一旦修改了3列的某个 ...

抱歉刚刚理解错了您的需求。要实现您所描述的功能,可以使用Excel的条件格式化。在这个示例中,我们不需要使用Python,因为您可以直接在Excel中实现此功能。请按照以下步骤操作:

1、打开Excel文件,选中要应用条件格式化的整个第三列(例如,如果数据在C列,请选中C列)。
2、在功能区中找到“条件格式化”按钮(通常在主页选项卡中),然后点击该按钮。
3、在弹出的菜单中,选择“新建规则”。
4、在“新建格式规则”对话框中,选择“使用公式确定要设置格式的单元格”。
5、在公式输入框中,输入以下公式(请根据实际情况调整单元格引用):
  1. =$B2<>$C2
复制代码

在这个例子中,假设您要比较的数据分别位于B列和C列。如果数据位于其他列,请相应地调整公式中的单元格引用。

6、点击“设置格式”按钮,然后在“设置格式”对话框中设置背景颜色为黄色,然后点击“确定”。
7、返回到“新建格式规则”对话框,再次点击“确定”。

现在,条件格式化已应用到第三列。当您更改第三列的值时,如果该值与相应的第二列值不同,该单元格的背景将变为黄色。

在Python中实现这个功能,您可以使用openpyxl库来设置条件格式。以下是一个示例代码,演示如何使用openpyxl将条件格式应用到Excel文件的第三列:

  1. import openpyxl
  2. from openpyxl.formatting.rule import CellIsRule
  3. from openpyxl.styles import PatternFill

  4. # 打开工作簿和工作表
  5. workbook = openpyxl.load_workbook('your_excel_file.xlsx')
  6. worksheet = workbook.active

  7. # 设置填充颜色为黄色
  8. yellow_fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")

  9. # 设置条件格式规则
  10. rule = CellIsRule(operator='notEqual',
  11.                   formula=['$B2'],  # 修改这里的引用以适应您的数据所在的列
  12.                   fill=yellow_fill)

  13. # 应用条件格式规则到整个第三列
  14. worksheet.conditional_formatting.add('C:C', rule)

  15. # 保存更改后的工作簿
  16. workbook.save('your_modified_excel_file.xlsx')
复制代码


请将 'your_excel_file.xlsx' 替换为你的实际Excel文件名,将 'your_modified_excel_file.xlsx' 替换为你希望保存的新Excel文件名。在这个示例代码中,我们创建了一个条件格式规则,将其应用到整个第三列。现在,当您更改第三列的值时,如果该值与相应的第二列值不同,该单元格的背景将变为黄色。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-17 19:58:39 | 显示全部楼层
相当于想实现这个功能
微信图片_20230417195658.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-18 14:56:03 | 显示全部楼层
liyuping-fisher 发表于 2023-4-17 19:58
相当于想实现这个功能

可以在Excel中使用内置的IF和AND函数结合条件格式来实现该功能。

首先,选中第三列需要标记背景色的区域,然后在【条件格式】菜单下选择【新建规则】。在弹出窗口中,选择【使用公式确定要设置的单元格】,然后输入以下公式:

  1. =AND(B1=C1, B1<>"")
复制代码


上述公式表示如果B列和C列值相等且不为空,则满足条件。

接下来,设置填充颜色为黄色,就可以将符合条件的单元格标记为黄色背景色。

最后,当你修改第三列某个单元格的值时,它的值会自动与第二列进行比较,同时判断是否满足设定的条件。如果符合条件,该单元格就会变成黄色标记。

需要注意的是,该方法只适用于单个工作表,如果你需要在多个工作表中应用此功能,则需要分别对每个工作表进行设置。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-19 16:03:35 | 显示全部楼层
歌者文明清理员 发表于 2023-4-18 14:56
可以在Excel中使用内置的IF和AND函数结合条件格式来实现该功能。

首先,选中第三列需要标记背景色的区 ...

我就是想把这个条件格式加入代码中可以不
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-19 18:17:06 | 显示全部楼层
liyuping-fisher 发表于 2023-4-19 16:03
我就是想把这个条件格式加入代码中可以不

Excel公式?不行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-20 09:11:47 | 显示全部楼层
目前了解到的python做不到公式插入单元格此贴暂时关闭~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-28 23:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表