安装好xlutils库之后,接下来修改已经存在的“Chapter-2-6-1.xls”工作簿,代码如下所示,代码在“Chapter-2-5.py”文件中。
第2行代码 from xlutils.copy import copy ,表示导入xlutils库中copy模块下的copy函数。因为暂时只用到copy函数,所以不用导入整个xlutils库。这种写法在表示上更简洁。如果导入整个xlutils库,那么在使用copy函数时表示方法为xlutils.copy.copy,而现在直接写copy就可以了。
第3行代码 wb=xlrd.open_workbook('Chapter-2-6-1.xls') ,表示读取“Chapter-2-6-1.xls”工作簿并赋值给wb变量。
第4行代码 nwb=copy(wb) ,表示使用copy函数复制第3行代码读取的wb工作簿并赋值给nwb变量。此时,nwb工作簿与wb工作簿相同,因为nwb工作簿是由wb工作簿复制而来的。请注意,由于使用了xlutils库中的copy函数,所以此时控制权已交给xlwt,也就是可以对nwb工作簿执行xlwt库中的写入操作。虽然没有使用import xlwt方式导入,但xlwt库必须存在,否则代码运行会出错。
第5行和第6行代码 ws1=nwb.get_sheet(0) 与 nwb.get_sheet('工资表') ,分别通过索引值和名称两种方法读取工作簿中已存在的工作表并赋值给对应的变量,此时也可以对工作表中的单元格对象进行写入操作。
第7行代码 ws3=nwb.add_sheet('汇总表') ,表示在读取到的现有工作簿中新建工作表并赋值给ws3变量。注意,如果再次运行此行代码,则会有出错提示,因为工作表名已存在,在同一个工作簿中不允许两个工作表名称相同。
第8行和第9行代码 ws3.write(0,0,'总计') 与 ws3.write(0,1,12000) ,表示在新建的“汇总表”工作表中写入数据,分别在第0行第0列的单元格中写入“总计”和在第0行第1列的单元格中写入12000,实际上就是在A1单元格和B1单元格中写入数据。
第10行代码nwb.save('Chapter-2-6-1.xls'),表示保存复制的工作簿。如果保存的名称与读取时的名称相同,则替换原来的工作簿,并且保证工作簿文件处于关闭状态。也可以在保存时设置不同的名称,相当于另存工作簿。
第5~10行代码中的get_sheet、add_sheet、write、save都是xlwt库中的方法。