Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Excel列以通用方式进行比较,并用一些颜色突出显示差异_Python_Excel_Xlsx_Xlsxwriter - Fatal编程技术网

Python Excel列以通用方式进行比较,并用一些颜色突出显示差异

Python Excel列以通用方式进行比较,并用一些颜色突出显示差异,python,excel,xlsx,xlsxwriter,Python,Excel,Xlsx,Xlsxwriter,我正在尝试将csv文件转换为excel,如下代码所示,我有几个列需要在excel和do conditional format中进行比较 在下面的代码中,我有硬编码单元“B2C2”、“C2:C1048576”。在不提供B2、C2的情况下,我是否可以使这些单元格的名称以通用方式读取,并在excel中比较完整的数据 无论我在哪里,都需要同时比较这些列。下面的链接有两个示例 for csvfile in glob.glob(os.path.join('.', "file1.csv")): wor

我正在尝试将csv文件转换为excel,如下代码所示,我有几个列需要在excel和do conditional format中进行比较

在下面的代码中,我有硬编码单元“B2C2”、“C2:C1048576”。在不提供B2、C2的情况下,我是否可以使这些单元格的名称以通用方式读取,并在excel中比较完整的数据

无论我在哪里,都需要同时比较这些列。下面的链接有两个示例

for csvfile in glob.glob(os.path.join('.', "file1.csv")):
    workbook = Workbook(csvfile[:-4] + '.xlsx')
    worksheet = workbook.add_worksheet()
    with open(csvfile, 'rt', encoding='utf8') as f:
        reader = csv.reader(f)
        for r, row in enumerate(reader):
            for c, col in enumerate(row):
                worksheet.write(r, c, col)
    orange_format = workbook.add_format({'bg_color':   '#FFEB9C',
                                     'font_color': '#9C6500'})

    worksheet.conditional_format('C2:C1048576', {'type':'formula',
                                       'criteria':'=B2<>C2',
                                       'format':orange_format})

    workbook.close()
glob.glob(os.path.join('.',“file1.csv”))中的csvfile的

工作簿=工作簿(csvfile[:-4]+'.xlsx')
工作表=工作簿。添加工作表()
将open(csvfile,'rt',encoding='utf8')作为f:
读卡器=csv。读卡器(f)
对于r,枚举(读取器)中的行:
对于c,枚举中的列(行):
工作表。书写(r、c、col)
orange_format=工作簿。添加_格式({'bg_color':'#FFEB9C',
'字体颜色':'#9C6500'})
工作表.条件_格式('C2:C1048576',{'type':'formula',
“标准”:“=B2C2”,
“格式”:橙色(U格式})
工作簿.关闭()
我有两种类型的excels数据,如下所示


如果你问如何制作

worksheet.conditional_format('C2:C1048576', {'type':'formula',
                                   'criteria':'=B2<>C2',
                                   'format':orange_format})
工作表.条件_格式('C2:C1048576',{'type':'formula',
“标准”:“=B2C2”,
“格式”:橙色(U格式})
可重复使用到其他列,然后尝试以下操作:

def get_previous_column(column):
    # if you're expecting to go above column `Z` then you'll need to improve this function
    return chr(ord(column) - 1)

def make_conditional_format(worksheet, col_src, col_tgt):
    column_range = f"{col_tgt}2:{col_tgt}1048576"
    worksheet.conditional_format(
        column_range, 
        {
            'type':'formula',
            'criteria':f'={col_src}2<>{col_tgt}2',
            'format':orange_format
         }
    )

columns_to_format = ['C', 'E', 'K', 'M']

for col_tgt in columns_to_format:
    col_src = get_previous_column(col_tgt)
    make_conditional_format(worksheet, col_src, col_tgt)
def get_previous_列(列):
#如果您希望在列'Z'上方,则需要改进此函数
返回chr(ord(列)-1)
def生成条件格式(工作表、列src、列tgt):
列范围=f“{col_tgt}2:{col_tgt}1048576”
工作表.U格式(
列_范围,
{
“类型”:“公式”,
“条件”:f'={col_src}2{col_tgt}2',
“格式”:橙色\u格式
}
)
列至列格式=['C'、'E'、'K'、'M']
对于列至列格式中的列:
col\u src=获取上一列(col\u tgt)
生成条件格式(工作表、列src、列tgt)

我不确定我是否理解,但您是否在问如何将当前适用于C列的条件格式重新用于E、K和m列?老实说,最简单的解决方案是为每列创建一个新条件。在python中使用循环很容易做到。@Dan。谢谢你的回复。在每个excel中,我都提到了键列,其余的列都有_SRC和_TGT。在不提供硬编码单元信息(如比较B和C)的情况下,我可以循环运行或以任何其他方式运行,以便自动比较所有列,如BwithC、DwithE……是的,请参阅我的答案。如果需要,可以像下面这样创建
string.ascii\u字母[2:26:2].upper()
import string
first)这样的
columns\u格式
),谢谢Dan。实际上,我的两个屏幕截图是两个不同的优点。我有不同的情况。但我正试图找到一种方法,无论我在哪里,我都想要比较那些对应的columns@Arya我已经更新了答案以接受srouce和target列。现在,您需要做的就是编写逻辑以找到“SRC”和“TGT”pairsIt。谢谢。我将尝试多个场景,如果我有任何疑问,我可以在同一页中询问吗?嗨,丹。正如你提到的一点#如果你希望在
Z列的上方
那么你需要改进这个函数---如果它大于'Z',比如'AA',AB',..@Arya,我该如何处理呢?谷歌很快告诉我:不知道它是否有效。