gpt4 book ai didi

python - openpyxl 中的 R1C1

转载 作者:太空宇宙 更新时间:2023-11-03 13:45:15 25 4
gpt4 key购买 nike

我正在尝试在 openpyxl 中设置条件格式来模拟突出显示重复值。使用这个简单的代码,我应该能够突出显示连续的重复项(但不是重复序列中的第一个值)。

from pandas import *
data = DataFrame({'a':'a a a b b b c b c a f'.split()})
wb = ExcelWriter('test.xlsx')
data.to_excel(wb)
ws = wb.sheets['Sheet1']

from openpyxl.style import Color, Fill
# Create fill
redFill = Fill()
redFill.start_color.index = 'FFEE1111'
redFill.end_color.index = 'FFEE1111'
redFill.fill_type = Fill.FILL_SOLID

ws.conditional_formatting.addCellIs("B1:B1048576", 'equal', "=R[1]C", True, wb.book, None, None, redFill)
wb.save()

但是,当我在 Excel 中打开它时,出现与条件格式相关的错误,并且数据未按预期突出显示。 openpyxl 是否能够处理 R1C1 样式引用?

最佳答案

关于突出显示以查找连续值的重复项,您需要的公式是

=AND(B1<>"",B2=B1)

范围从 B2(又名 B2:B1048576)开始

注意 - 这似乎在 openpyxl 的当前 1.8.3 分支中被破坏,但很快将在 1.9 分支中修复。

from openpyxl import Workbook
from openpyxl.style import Color, Fill
wb = Workbook()
ws = wb.active
ws['B1'] = 1
ws['B2'] = 2
ws['B3'] = 3
ws['B4'] = 3
ws['B5'] = 7
ws['B6'] = 4
ws['B7'] = 7

# Create fill
redFill = Fill()
redFill.start_color.index = 'FFEE1111'
redFill.end_color.index = 'FFEE1111'
redFill.fill_type = Fill.FILL_SOLID

dxfId = ws.conditional_formatting.addDxfStyle(wb, None, None, redFill)
ws.conditional_formatting.addCustomRule('B2:B1048576',
{'type': 'expression', 'dxfId': dxfId, 'formula': ['AND(B1<>"",B2=B1)']})
wb.save('test.xlsx')

作为进一步的引用:

  • 如果要突出显示所有重复项:

    COUNTIF(B:B,B1)>1

  • 如果您想突出显示除第一次出现以外的所有重复项:

    COUNTIF($B$2:$B2,B2)>1

  • 如果要突出显示连续的重复项,除了最后一个:

    COUNTIF(B1:B2,B2)>1

关于 RC 表示法 - 虽然 openpyxl 不支持 excel RC 表示法,但条件格式将按照提供的方式编写公式。不幸的是,excel 仅在表面上将 R1C1 表示法作为标志启用,并在保存时将所有公式转换回它们的 A1 等价物,这意味着您需要一个函数将所有 R1C1 函数转换为其 A1 等价物才能工作。

关于python - openpyxl 中的 R1C1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21693133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com