有如下一個excel表
表內有合并單元格,現在需要求和,不能直接下拉填充公式怎么辦?
通常的辦法是先取消合并單元格,計算后,再次合并單元格,比較繁瑣。
在此,嘗試使用python和xlwings運行直接給出想要的結果。
代碼如下:
import xlwings as xwdef fill_missing_departments(data):result = []current_department = Nonefor row in data:if row[0] is not None:current_department = row[0]result.append([current_department, row[1], row[2]])return resultdef sum_salaries_by_department(file_path):# 打開Excel工作簿wb = xw.Book(file_path)sheet = wb.sheets[0] # 假設數據在第一個sheet中# 獲取數據范圍data_range = sheet.range('A2:C9').value # 假設數據在這個范圍內print(data_range)# [['財務部', '張三', 4586.0], [None, '清風', 5452.0], ['市場部', '李四', 6589.0], [None, '李白', 8728.0], [None, '青州', 8923.0], ['行政部', '郭靖', 8192.0], [None, '黃蓉', 5968.0], ['企劃部', '吳勇', 6728.0]]filled_data = fill_missing_departments(data_range)print(filled_data)# [['財務部', '張三', 4586.0], ['財務部', '清風', 5452.0], ['市場部', '李四', 6589.0], ['市場部', '李白', 8728.0], ['市場部', '青州', 8923.0], ['行政部', '郭靖', 8192.0], ['行政部', '黃蓉', 5968.0], ['企劃部', '吳勇', 6728.0]]# 創建部門薪資匯總字典salary_sum = {}for row in filled_data:department = row[0]salary = row[2]if department in salary_sum:salary_sum[department] += salaryelse:salary_sum[department] = salaryprint(salary_sum)# {'財務部': 10038.0, '市場部': 24240.0, '行政部': 14160.0, '企劃部': 6728.0}summary_data = salary_sum# 將數據salary_sum寫入合并單元格中# 記錄哪些部門已經寫入,避免寫到合并單元格中間written_departments = set()# 從第2行開始遍歷(假設第1行為表頭)row = 2while True:dept_cell = sheet.range(f"A{row}")dept = dept_cell.valueif dept is None:# 如果整行都為空,說明已經到底了if sheet.range(f"B{row}").value is None and sheet.range(f"C{row}").value is None:breakelse:row += 1continueif dept in summary_data and dept not in written_departments:sheet.range(f"D{row}").value = summary_data[dept]written_departments.add(dept)row += 1# 保存工作簿wb.save()wb.close()my_xlsx_path = '合并單元格的求和.xlsx'
sum_salaries_by_department(my_xlsx_path)
運行后,直接實現了目標