需求所述如标题所示,直接贴代码了:
import pandas as pd
import xlwings as xw
import copy
def sort_value_get_min_max(oridata,first_value,second_value):
min_max_list = []
oridata.sort()
min = oridata[0:first_value]
oridata.sort(reverse=True)
max = oridata[0:second_value]
min_max_list.append(min)
min_max_list.append(max)
return min_max_list
#读取单元格数值
def getSheetDataFromExcel1(path, sheetName, start):
wb = xw.Book(path)
todaySheet = wb.sheets[sheetName]
data = todaySheet.range(start).value
return data
#找到原始数据表中的这个值的位置,然后推断出这个值在excel中的位置
def position_excel_min_max_data(first_value,second_value):
table_data = getSheetDataFromExcel1('.\测试颜色表格.xlsx','Sheet1','A2:A13')
table_data_temp = copy.deepcopy(table_data)
min_max_list = sort_value_get_min_max(table_data_temp,first_value,second_value)
min = min_max_list[0]
max = min_max_list[1]
position = [];
#先处理小的
for j in min:
position.append(table_data.index(j))
for i in max:
position.append(table_data.index(i))
return position
#上色
def color_excel_min_max_data(first_value,second_value):
wb = xw.Book('.\测试颜色表格.xlsx')
sht = wb.sheets['Sheet1']
length = len(position_excel_min_max_data(first_value,second_value))
for i in position_excel_min_max_data(first_value,second_value)[0:first_value]:
sht.range('A' + str(i+2)).color = 0x00FF00
for j in position_excel_min_max_data(first_value,second_value)[-second_value:]:
sht.range('A' + str(j+2)).color = 0xFF0000
color_excel_min_max_data(4,5)
虽然这个需求完成了,但是可扩展性不强,只能一步步计算,目前没找到怎样返回值所对应的单元格的方法。以下是CSDN的Weiming Chen提出的一种方案,扩展性较强些,可以参考。
首先遍历肯定是横坐标纵坐标都遍历对吧,纵坐标就不说了,你的问题应该是横坐标的字母怎么办。其实很简单,你把字母也看成数,1位横坐标是a到z,计数变量1位是0到9。所以本质上是10进制转26进制的问题。至于怎么转,你如果是电子信息相关专业的学生或者从事这个行业应该学过微机原理或者数电等,按权分解就好了。