Python编程快速上手第13章实践项目13.14.2空行插入程序

题目:

创建一个程序blankRowInserter.py,它接收两个整数和一个文件名字符串作为命令行参数。我们将第一个整数称为N,第二个整数称为M。程序应该从第N行开始,在电子表格中插入M个空行。例如,如果这样执行程序:

python blankRowInserter.py 3 4 myProduce.xlsx

执行之前和之后的电子表格,应该如图13-12所示。

Python编程快速上手第13章实践项目13.14.2空行插入程序_第1张图片

图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.')

 后面的其他操作都与上面的一样。

你可能感兴趣的:(Python编程快速上手,python)