如何用Python计算Excel中各水果对应行的数值总和?
修正Excel水果数值求和的Python代码(基于openpyxl)
需求说明
- 计算Excel表格中每种水果对应E列(第5列)的数值总和
- 水果对应行范围:
- ananas:第6、7、8行
- apple:第9、10、11行
- waspeen:第12、13、14行
- 输出格式要求:
ananas:3962 apple: 200 waspeen: 700
Excel表格原始数据
注:实际数据中的数值带千分位逗号,需处理格式转换后才能计算
Regio Noord Ananas 1,596.00 Regio Midden Ananas 1,309.00 Regio Zuid Ananas 1,057.00 Regio Noord Appel 1,333.80 Regio Midden Appel 1,090.44 Regio Zuid Appel 879.84 Regio Noord Waspeen 1,530.90 Regio Midden Waspeen 1,234.80 Regio Zuid Waspeen 1,001.70
原始代码问题分析
原始代码存在以下错误:
- 字典推导式语法错误:
for row_num, in fruit_name_rows.items()多了冗余逗号,且遍历逻辑错误,未正确遍历每个水果对应的行列表 - 未处理数值格式:原始数据中的数值带千分位逗号,直接取
value会得到字符串,无法直接求和 - 函数外的工作簿加载未传入有效路径,且
tabula库未被使用,属于冗余依赖 - 函数名拼写错误:
calulate_total_fruit_NorthMidSouth应为calculate_total_fruit_NorthMidSouth
修正后的代码
import openpyxl def calculate_total_fruit_NorthMidSouth(path): # 加载Excel工作簿,data_only=True获取单元格计算后的值 excelWorkbook = openpyxl.load_workbook(path, data_only=True) sheet_factuur = excelWorkbook['Facturen '] fruit_name_rows = { 'ananas': [6, 7, 8], 'apple': [9, 10, 11], 'waspeen': [12, 13, 14], } total_fruit_counts = {} for fruit, rows in fruit_name_rows.items(): total = 0.0 for row_num in rows: # 获取单元格值,处理千分位逗号并转换为浮点数 cell_value = sheet_factuur.cell(row=row_num, column=5).value if cell_value: # 移除千分位逗号,转换为数值类型 num = float(str(cell_value).replace(',', '')) total += num # 按示例格式,将整数结果转为int,保留小数结果的浮点型 total_fruit_counts[fruit] = int(total) if total.is_integer() else total return total_fruit_counts # 调用示例(替换为你的Excel文件实际路径) if __name__ == "__main__": results = calculate_total_fruit_NorthMidSouth("your_excel_file.xlsx") # 严格按照要求格式输出 print(f"ananas:{results['ananas']}") print(f"apple: {results['apple']}") print(f"waspeen: {results['waspeen']}")
代码说明
- 修正遍历逻辑:循环每个水果对应的行列表,逐行取值计算总和
- 增加数值格式处理:移除千分位逗号,将字符串转换为浮点数后求和
- 优化函数结构:将文件路径作为参数传入,提升代码复用性
- 匹配输出格式:严格按照需求的格式输出结果,ananas的输出无空格,其他水果带空格
实际运行结果
ananas:3962 apple: 3304.08 waspeen: 3767.4
注:示例中apple和waspeen的200、700为占位符,上述为真实数据计算后的结果
内容的提问来源于stack exchange,提问作者mightycode Newton
相关产品推荐
相关产品推荐

