Python写入字典_Excel与Python学习专题04:空行插入程序

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

excelperfect

在Excel工作表中,我们通常使用功能区中“开始”选项卡“单元格”组中的“插入”命令来插入行或列。然而,每次我们只能插入一行或一列。如果需要插入多行或多列,则需要一点技巧。例如,如果要连续插入3行,那么可以先选择3行或者同一列中的连续3个单元格,然后再使用“插入——插入工作表行”命令,如下图1所示。

e2bba56093d0606ae29ba19fd2df9da5.gif

图1

下面,我们想要。这可以使用VBA来实现,也可以使用Python实现。本文介绍使用Python实现的代码。

如下图2所示的工作表。

ae9dd1fdecedfd2867953ad7ea51b196.png

图2

假设想要在第3行后,插入连续的2个空行,结果应该如下图3所示。

c7e2023b5a3908b77f4cc4cb92a32ec8.png

图3

下面是实现结果的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

#声明变量且指定开始插入空行的行号及插入的空行数

startnum = 3

blanknums = 2

#清空工作表中要插入空行行号后面的内容

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

    for cell in row:

       cell.value=""

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

wb.save("mydata.xlsx")

#将要插入空行的行号后的数据写入到工作表相应的行中

for rownum in range(startnum+blanknums+1,rowkey+blanknums):#取行号

    for colnum inrange(1,ws.max_column+1):#取列号

        #写入数据

       ws.cell(row=rownum,column=colnum).value =mydatas[rownum-blanknums][colnum-1]

#保存工作簿

wb.save("mydata.xlsx")

代码的思路是,首先将工作表的数据存储在字典中,然后清除工作表中要在其之后插入空行的行之后的所有数据,最后取出字典中的数据并将其写入工作表中插入空行之后的行中。详细的代码作用请参见代码中给出的注释。

还记得我们的目的吗?我们想要在工作表的第N行后自动插入连续M个空行。如果进行适当的设置,也可以直接在命令行中直接输入N和M的值,这样不必像上面的代码那样硬编码,而是由用户指定想要在那行后插入多少个空行。

修改后的代码如下:

033d7e6261250b83120ceb2f3c98f06e.png

图4

注意到,第1行是#! Python3,告诉计算机让Python来执行这个程序。代码中,使用sys.argv代替了原代码中的硬编码数字。这样,用户就可以在命令行中指定要插入的行的位置和行数。例如,如果用户要求在工作表的第2行之后插入连续的5个空行,可在命令行中使用下面的命令:

blankRowInserter.py 2 5

如下图5所示。

26739aa104b737c8ea6bf85d30fcbf4d.png

图5

运行后的结果如下图6所示。

ef313bf627b45c5c22c5edf4e81846de.png

图6

6a7403cba8c0d7546348d27cff157273.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值