programing

팬더 read_excel에서 Excel 셀 배경색을 얻으시겠습니까?

goodsources 2023. 6. 25. 18:45
반응형

팬더 read_excel에서 Excel 셀 배경색을 얻으시겠습니까?

나는 있습니다..xls배경색 셀이 있는 Excel 파일입니다.나는 그 파일을 판다들에게 읽어주고 있습니다.read_excel세포의 배경색을 얻을 수 있는 방법이 있습니까?

위에서 제안한 솔루션은 다음과 같은 경우에만 작동합니다.xls파일, 대상이 아님xlsx파일입니다. 이것은 문제를 제기합니다.NotImplementedError: formatting_info=True not yet implemented.Xlrd라이브러리가 아직 작업에 업데이트되지 않았습니다.xlsx파일. 그래서 당신은 해야 합니다.Save As사용자에게 맞지 않을 수도 있는 형식을 매번 변경합니다.
다음에 대한 솔루션이 있습니다.xlsx파일:사용openpyxl도서관. A2색 코드를 알아내야 하는 세포입니다.

import openpyxl
from openpyxl import load_workbook
excel_file = 'color_codes.xlsx' 
wb = load_workbook(excel_file, data_only = True)
sh = wb['Sheet1']
color_in_hex = sh['A2'].fill.start_color.index # this gives you Hexadecimal value of the color
print ('HEX =',color_in_hex) 
print('RGB =', tuple(int(color_in_hex[i:i+2], 16) for i in (0, 2, 4))) # Color in RGB

마크의 제안에 따라 강제로 통과시킵니다.

from xlrd import open_workbook
wb = open_workbook('wb.xls', formatting_info=True)
sheet = wb.sheet_by_name("mysheet")
#create empy colormask matrix
bgcol=np.zeros([sheet.nrows,sheet.ncols])
#cycle through all cells to get colors
for row in range(sheet.nrows):
  for column in range(sheet.ncols):
    cell = sheet.cell(row, column)  
    fmt = wb.xf_list[cell.xf_index]
    bgcol[row,column]=fmt.background.background_colour_index
#return pandas mask of colors
colormask=pd.DataFrame(bgcol) 

하지만 판다를 직접 통과할 수 있는 더 좋은 방법이 있을 것입니다.

Sumit의 답변을 개선하면(내 생각에는 받아들여져야 할 답변), 목록 이해를 사용하여 전체 열의 색상을 얻을 수 있습니다.

import openpyxl
from openpyxl import load_workbook
excel_file = 'my_file.xlsx' 
wb = load_workbook(excel_file, data_only = True)
sh = wb['my_sheet']
# extract color from column A.
color_in_hex = [cell.fill.start_color.index for cell in sh['A:A']]

는 이 링크를 기반으로 위의 @csaladenes의 응답에서 코드 스니펫을 편집했고, 그것은 제 xls 파일에서 작동합니다(원래는 배경색은 다르지만 모든 셀이 동일한 색 색인을 표시하도록 했습니다).

import xlrd
import numpy as np
wb = xlrd.open_workbook(file, formatting_info=True)
sheet = wb.sheet_by_name("mysheet")
bgcol=np.zeros([sheet.nrows,sheet.ncols])
for row in range(sheet.nrows):
    for col in range(sheet.ncols):
        c = sheet.cell(row, col)
        cif = sheet.cell_xf_index(row, col)
        iif = wb.xf_list[cif]
        cbg = iif.background.pattern_colour_index
        bgcol[row,col] = cbg

언급URL : https://stackoverflow.com/questions/47857112/get-excel-cell-background-color-in-pandas-read-excel

반응형