Python写入字典_Excel与Python学习专题05:空行插入程序(升级版)

学习Excel技术,关注微信公众号:

excelperfect

在本系列的上一篇文章《Excel与Python学习专题04:空行插入程序》中,我们实现了自动在指定的行后插入指字数量的空行的Python程序。然而,需求总是千变万化的。在Excel中,经常会遇到间隔多少行插入指定数量的空行的情形。譬如,在制作工资条时,为了方便,需要间隔几行后插入1个空行。对于包括大量数据的工作表,如果手工进行这样的操作,将会枯燥乏味且浪费大量的时间。

如下图1所示的工作表。

9ef89c263040a7f78dc06b19cc770263.png

图1 

我们想要每隔2行插入3个空行,如下图2所示。

3e6e2366606f4eeb7eacc0d2b1450180.png

图2

下面是实现结果的Python代码:

import openpyxl, os

#改变当前文件夹

os.chdir('E:\\完美Excel')

#装载要处理的工作簿

wb = openpyxl.load_workbook('mydata.xlsx')

#获取要处理的工作表

ws = wb['Sheet1']

#用来存储数据的字典

mydatas = {}

#声明行计数变量且使用其作为字典键

rowkey = 1

#遍历工作表行并将数据存储在字典中

for row inws.iter_rows(min_row=1,max_col=ws.max_column,max_row=ws.max_row):

    mydatas.setdefault(rowkey,[])

    for cell in row:

       mydatas[rowkey].append(cell.value)

    rowkey += 1

#声明变量且指定间隔的行数和插入的空行数

intervalnum = 2 #间隔行

blanknums = 3 #空行

maxrow = ws.max_row #工作表数据最大行

maxcol = ws.max_column #工作表数据最大列

#清空工作表

for row in ws.iter_rows(min_row=1,max_col=maxcol,max_row=maxrow):

    for cell in row:

       cell.value=""

#工作簿必须关闭且要保存才有效

wb.save("mydata.xlsx")

#声明取字典键的变量

ikey = 1

#将数据写入到工作表相应的行中

for loopnum in range(0,maxrow//intervalnum+1):

    for startendrow inrange((intervalnum+blanknums)*loopnum+1,(intervalnum+blanknums)*(loopnum+1)+1):

        if startendrow

            for col inrange(1, maxcol+1):

                if ikey inmydatas.keys():

                    ws.cell(row=startendrow,column=col).value= mydatas[ikey][col-1]

            ikey += 1

#保存工作簿

wb.save("mydata.xlsx")

代码的思路是,首先将工作表的数据存储在字典中,然后清除工作表的所有数据,接着通过计算得出数据行和空行在工作表中的位置,最后取出字典中的数据并将其写入工作表相应的位置。详细的代码作用请参见代码中给出的注释。

其中:

  • 变量intervalnum指定间隔的行数,blanknums指定要插入的空行数。

  • maxrow//intervalnum+1得到间隔行和空行的循环数,即要插入多少次空行,需要插入一次空行计为一轮,示例中要循环5次。maxrow为插入空行前工作表中含有数据的最大行号。

  • (intervalnum+blanknums)*loopnum+1算出每轮的起始行,示例中分别为1、6、11、16、21;(intervalnum+blanknums)*(loopnum+1)+1算出每轮的结束行,示例中分别为6、11、16、21、26。

  • startendrow < (intervalnum+blanknums)*loopnum+1+intervalnum判断每轮循环中要写入数据的行,其余行为空行。

  • ikey in mydatas.keys()判断循环计数是否还处于字典的键中,以免最后1行漏掉而没有写入工作表。

下图为代码的图片版。

7f7b4b1d624be036dc3c4be1245e78e3.png

最后,你可以修改代码中的硬编码,以实现自已想要的间隔行插入空行数。也可以像《Excel与Python学习专题04:空行插入程序》一样,将程序进行修改得更灵活,可以让用户在命令行中指定间隔行和空行。

ddea8dde56baf241c7be3b7b40ab21e6.png

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值