017 在起始为空的工作表中计算数据

此案例主要通过使用Worksheet的min_row、min_column、max_row、max_column属性设置iter_cols()方法的min_row、min_col、max_row、max_col参数,从而实现读写起始(首行首列)为空的工作表数据,并按列求和。当运行此案例的Python代码(A034.py文件)之后,将计算“收入表.xlsx”文件的收入表(前几行和前几列为空白的工作表)的各个类别的收入合计,代码运行前后的效果分别如图017-1和图017-2所示。

图017-1

图017-2

A034.py文件的Python代码如下:

import openpyxl
myBook=openpyxl.load_workbook('收入表.xlsx')
mySheet=myBook.active
#根据起始单元格和结束单元格设置数据范围的最小行列数和最大行列数
myMinRow=mySheet.min_row+4
myMinColumn=mySheet.min_column+1
myMaxRow=mySheet.max_row
myMaxColumn=mySheet.max_column
#指定按列操作单元格的数据范围
myRange=mySheet.iter_cols(min_row=myMinRow,min_col=myMinColumn,
                          max_row=myMaxRow,max_col=myMaxColumn)
myRowIndex=myMinRow+4
myColIndex=myMinColumn-1
mySheet.cell(myRowIndex,myColIndex).value='合计'
#按列对单元格数据求和
for myCol in myRange:
     myColIndex+=1
     myColSum=sum(myCell.value for myCell in myCol)
     #将合计数据写入单元格
     mySheet.cell(myRowIndex,myColIndex).value=myColSum
myBook.save('结果表-收入表.xlsx')

在上面这段代码中,mySheet的min_row、min_column、max_row、max_column属性表示收入表(mySheet)的起始单元格和结束单元格的行列编号,一般情况下,如果工作表的(包含数据的)单元格从首行首列开始,则工作表的min_row=1、min_column=1。但是在此案例中,收入表(mySheet)的首行和首列之前均有几行空白,它的min_row=4、min_column=3,因此在设置iter_cols()方法的min_row、min_col参数时,应该考虑这种特殊情况。

此案例的源文件是MyCode\A034\A034.py。