需求

原始表格:
Python对Excel求和、合并居中
想在Total列中对每日的Amount进行汇总,然后对Date和Total进行合并居中,效果如下:
Python对Excel求和、合并居中

思路

遍历Excel行,从第一个非空Date列开始,到下个非空Date列,对Amount列进行求和,结果赋给第一个非空Data列对应行的Total列。若Amount列开始遇到空值,则从上一个非空Date行开始到Amount空值对应行的上一行为止,进行合并。

代码

import os
import openpyxl
from openpyxl.styles import Border, Side, PatternFill, Font, GradientFill, Alignment

os.chdir('D:\\Users\\Desktop\\Temp')
wb = openpyxl.load_workbook('In.xlsx')

# 函数:范围单元格求和
def range_sum(worksheet,start,end):
    sum = 0
    for row in worksheet[start:end]:
        for cell in row:
            if cell.value != None:
                sum += cell.value
    return sum


# 函数:对某sheet求和并居中
def total_amount(worksheet):
    ws = worksheet
    row, max_row = 2, ws.max_row
    
    while row < ws.max_row:
        sum_row_start, sum_row_end = row, row
        for working_row in range(row + 1,max_row):
            # 长条件,换行增强可读性
            if (ws['A' + str(working_row)].value != None 
                   or (ws['C' + str(working_row)].value == None 
                          and ws['C' + str(working_row-1)].value != None)):
                sum_row_end = working_row - 1
                # 求和
                ws['D' + str(sum_row_start)] = range_sum(ws,'C' + str(sum_row_start),'C' + str(sum_row_end))
                # 合并
                ws.merge_cells('D' + str(sum_row_start) + ':D' + str(sum_row_end))
                ws.merge_cells('A' + str(sum_row_start) + ':A' + str(sum_row_end))
                # 居中
                ws['D' + str(sum_row_start)].alignment = Alignment(horizontal="center", vertical="center")
                ws['A' + str(sum_row_start)].alignment = Alignment(horizontal="center", vertical="center")
                
                break;
        row = sum_row_end + 1;

# 根据情况完善代码
total_amount(wb['Sheet1'])
wb.save('Out.xlsx')

本功能用到了openpyxl模块,更多Excel操作请见官网

相关文章:

  • 2022-12-23
  • 2021-04-09
  • 2021-10-19
  • 2021-12-25
  • 2022-12-23
  • 2022-01-07
  • 2021-12-07
  • 2021-07-07
猜你喜欢
  • 2021-11-04
  • 2021-10-26
  • 2021-12-17
  • 2021-12-25
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案