题目:
创建一个程序blankRowInserter.py,它接收两个整数和一个文件名字符串作为命令行参数。我们将第一个整数称为N,第二个整数称为M。程序应该从第N行开始,在电子表格中插入M个空行。例如,如果这样执行程序:
python blankRowInserter.py 3 4 myProduce.xlsx
执行之前和之后的电子表格,应该如图13-12所示。
图13-12 在第3行插入两个空行之前(左边)和之后(右边)
此程序可以这样写:读入电子表格的内容,然后再写入新的电子表格时,利用for循环复制前面N行。对于剩下的行,行号加上M,然后将其写入输出的电子表格。
基于Windows11,python3.11版本,根据题目要求的代码如下:
#! python3
import openpyxl, sys, os
# 首先修改目录路径
os.chdir(r'C:\path\to\your') # 此为你电脑上运行 .py 程序的目录路径
# 即使你要打开的表格和这个.py文件同在这一个目录下,也需要添加这一行才能成功运行代码。
# 获取命令行参数
if len(sys.argv) != 4:
print('Usage: python blankRowInserter.py N M filename')
sys.exit()
try:
n = int(sys.argv[1])
m = int(sys.argv[2])
except ValueError:
print('N and M must be integers.')
sys.exit()
filename = str(sys.argv[3])
# 打开电子表格文件
wb = openpyxl.load_workbook(filename)
sheet = wb.active
# 获取总行数和列数
max_row = sheet.max_row
max_column = sheet.max_column
# 创建新的电子表格
new_wb = openpyxl.Workbook()
new_sheet = new_wb.active
# 拷贝前面的N行
for row in range(1, n + 1):
for col in range(1, max_column + 1):
new_sheet.cell(row=row, column=col).value = sheet.cell(row=row, column=col).value
# 写入空行
for row in range(n + 1, max_row + 1):
for col in range(1, max_column + 1):
new_sheet.cell(row=row + m, column=col).value = sheet.cell(row=row, column=col).value
# 保存新的电子表格文件
new_wb.save('new_' + filename)
print('Blank rows inserted successfully.')
接着创建一个批处理文件,类似如下:
@py.exe C:\path\to\your\blankRowInserter.py %*
@pause
用你自己程序的绝对路径替换该路径,并将这个文件以.bat文件拓展名保存(如blankRowInserter.bat)。@pause会在Python脚本结束后添加“Press any key to continue...”,以防止程序窗口过快消失。同时将此.bat文件保存到C:\Windows目录下。
接着命令行使用方法:
blankRowInserter N M filename
其中,N是要从哪一行开始插入空行,M是要插入的空行数量,filename是要操作的电子表格文件名。例如:
blankRowInserter 5 6 example.xlsx
程序会在同一目录下生成一个新的电子表格文件new_example.xlsx,其中已经插入了空行。
至此项目完成。
当然啦,上面的代码是比较复杂的,可以用openpyxl自带的属性insert_rows来直接插入行,代码如下:
#! python3
import os, sys
from openpyxl import load_workbook
# 首先更改目录路径
os.chdir(r'C:\path\to\your')
# 获取命令行参数
if len(sys.argv) != 4:
print('Usage: python blankRowInserter.py N M filename')
sys.exit()
try:
n = int(sys.argv[1])
m = int(sys.argv[2])
except ValueError:
print('N and M must be integers.')
sys.exit()
filename = sys.argv[3]
# 打开电子表格文件
wb = load_workbook(filename)
sheet = wb.active
# 插入空行
for i in range(m): # 遍历循环需要的空行数量,因为是从 0 开始编起,故这里直接用 m
sheet.insert_rows(n) # 从第 n 行开始插入 m 行
# 保存新的电子文件表格
wb.save('new_' + filename)
print('Blank rows are inserted successfully.')
后面的其他操作都与上面的一样。