+86 159******32_841551
嗯嗯 也考虑这样的结果,可以给一下代码吗?或者分享一下思路?

我只能跟你说思路·以便你能自己掌握,图上是显示了公式的。
手动的过程是这样的: C是一个把AB联立的列,把C列和E列合并计算后,得到F和G列,然后H列匹配得到以按C列来排好的G列金额。 C列内容相同的单元格合并就会有D列这个格式,再把D列的格式 用格式刷刷到I列·,就是说H列刷一下格式后就是I列 ·(不直接 内容相同的单元格合并H列是因为H列是有可能算出来金额相同但是又是另一个摘要的。)
用机器人去实现以上手动过程有三个难点·第一点合并计算 第二点 格式刷,第三点合并相同内容的单元格。
最简单的手法:这三点都可以通过键盘鼠标模拟来实现,比如合并计算可以用 ALT D N然后再用拖动去选中列就行了。你可能会有疑问·如果我的列到处跑呢?不一定在那个位置,你可以在机器人前面留流程中加上列宽设置,然后表格每个单元格的位置都是固定的来实现。
当然键盘鼠标模拟有时候是不稳定的,你可以把以下文本复制在复制到\6.0.1.220629\extend\python中 保存为.py文件在机器人调用这两个函数(详细做法请查阅uibot官方文档),合并计算的函数输入和输出都是数组,你把读取的数组喂给这个函数然后再用一个变量去接输出的结果即可,格式刷的函数使用前需要激活当前的工作表哦。如果你需要其他功能,可以把以下函数喂给chatgpt让他在win32的库内(其他库uibot需要装才能用,太复杂不推荐)选择函数来修改,把原有的功能去掉加上你想要的功能即可。
///合并计算///
def merge_cells_and_return_data(data):
# 提取表头
headers = data[0]
# 定义字典用于保存合并后的数据
count_dict = {}
# 过滤无效数据并合并计算
for row in data[1:]:
name = row[0]
count_str = row[1]
try:
count = float(count_str)
if name in count_dict:
count_dict[name] += count
else:
count_dict[name] = count
except ValueError:
pass
# 构造返回数据数组
output_data = [headers]
for name, count in count_dict.items():
output_data.append([name, count])
return output_data
"""格式刷"""
def change_cell_format_brush(file_name, sheet_name, source_cell, target_cell):
# 获取当前已经打开的 Excel 应用程序实例
try:
excel = win32com.client.GetActiveObject("Excel.Application")
except Exception:
print("没有找到已经打开的 Excel 应用程序")
return
# 获取工作簿和工作表对象
workbook = excel.Workbooks(file_name)
try:
worksheet = workbook.Worksheets(sheet_name)
except Exception:
print("无法找到工作表: ", sheet_name)
return
# 判断单元格地址是否为范围地址
if ":" in source_cell:
source_range = source_cell
else:
source_range = "{}:{}".format(source_cell, source_cell)
# 得到源单元格范围对象
source_range_obj = worksheet.Range(source_range)
# 判断目标单元格地址是否为范围地址
if ":" in target_cell:
target_range = target_cell
else:
target_range = "{}:{}".format(target_cell, target_cell)
# 得到目标单元格范围对象
target_range_obj = worksheet.Range(target_range)
# 应用格式刷
source_range_obj.Copy()
target_range_obj.PasteSpecial(-4122) # 格式刷