实践出真知,这次我们就通过一些实例来巩固一下用Python的openpyxl模块处理Excel的一些操作吧!
创建程序,从命令行接收数字N,在一个Excel电子表格中创建一个N×N的乘法表。行1和列A用作标签,应该使用粗体。
# coding=utf-8
import openpyxl
from openpyxl.utils import get_column_letter
from openpyxl.styles import Font
N = int(input('请输入一个数字:'))
wb = openpyxl.Workbook()
sheet = wb.active
fontObj = Font(bold=True)
# 先将第一行和第一列的数据写入,并设置字体样式
for i in range(1, N + 1):
sheet[get_column_letter(i + 1) + str(1)] = i
sheet[get_column_letter(i + 1) + str(1)].font = fontObj
sheet['A' + str(i + 1)] = i
sheet['A' + str(i + 1)].font = fontObj
# 写入其他行的数据
for i in range(2, N + 2):
for j in range(2, N + 2):
sheet.cell(row=i, column=j).value = sheet.cell(row=1, column=j).value * sheet.cell(row=i, column=1).value
# 保存文件
wb.save('D:\\PythonCodes\\multiplicationTable.xlsx')
创建一个程序,它接手两个整数和一个文件名字符串作为命令行参数,我们将第一个整数称作N,第二个整数称作M。程序应当从第N行开始,在电子表格中插入M个空行。
程序可以这样写:读入电子表格的内容,然后在写入新的电子表格时,利用 for 循环拷贝前面的N行。对于剩下的行,行号加上M,写入新的电子表格。
# coding=utf-8
import openpyxl
N = int(input("输入N:"))
M = int(input("输入M:"))
string = input("输入文件名:")
# 读取文件
wb1 = openpyxl.load_workbook("D:\\PythonCodes\\Produce.xlsx")
sheet1 = wb1.active
# 创建新的workbook对象
wb2 = openpyxl.Workbook()
sheet2 = wb2.active
# 循环遍历表格
for i in range(1, sheet1.max_row + 1):
for j in range(1, sheet1.max_column + 1):
# N行之前拷贝
if i < N:
sheet2.cell(row=i, column=j).value = sheet1.cell(row=i, column=j).value
else:
sheet2.cell(row=i+M, column=j).value = sheet1.cell(row=i, column=j).value
wb2.save(string)
编写一个程序,翻转电子表格中行和列的单元格。例如,第5行第3列的值将出现在第3行第5列(反之亦然)。这应该针对电子表格中的所有单元格进行。
程序可以这样写:利用嵌套的 for 循环,将原来电子表格的数据赋给行列互换后的新的电子表格。
# coding=utf-8
import openpyxl
# 读取文件
wb1 = openpyxl.load_workbook("D:\\PythonCodes\\reverse.xlsx")
sheet1 = wb1.active
# 创建新的workbook对象
wb2 = openpyxl.Workbook()
sheet2 = wb2.active
# 循环遍历原来的表格
for i in range(1, sheet1.max_row + 1):
for j in range(1, sheet1.max_column + 1):
# 新的表格行列翻转,赋值
sheet2.cell(row=j, column=i).value = sheet1.cell(row=i, column=j).value
# 保存文件
wb2.save('D:\\PythonCodes\\reverse_copy.xlsx')
编写一个程序,读入几个文本文件的内容,并将这些内容插入到一个电子表格,每行写入一行文本。第一个文本文件中的行将写入列A中的单元格,第二个文本文件中的行将写入B中的单元格。
利用 File 对象的 readlines() 方法,返回一个字符串的列表,每个字符串就是文件中的一行。对于第一个文件,将第一行输出到列1行1。第二行应该写入列1行2,以此类推。下一个用 readlines() 读入的文件将写入列2,再下一个写入列3,以此类推。
# coding=utf-8
import openpyxl
wb = openpyxl.Workbook()
sheet = wb.active
# 读取第一个文本
# 创建File对象
with open("D:\\PythonCodes\\1.txt") as f1:
list1 = f1.readlines()
for i in range(1, len(list1) + 1):
sheet.cell(row=i, column=1).value = list1[i - 1]
# 读取第二个文本
with open("D:\\PythonCodes\\2.txt") as f2:
list2 = f2.readlines()
for i in range(1, len(list1) + 1):
sheet.cell(row=i, column=2).value = list2[i - 1]
# 读取第三个文本
with open("D:\\PythonCodes\\3.txt") as f3:
list3 = f3.readlines()
for i in range(1, len(list3) + 1):
sheet.cell(row=i, column=3).value = list3[i - 1]
wb.save('D:\\PythonCodes\\example_.xlsx')
编写一个程序,执行前一个程序相反的任务。该程序应该打开一个电子表格,将列A中的单元格写入一个文本文件,将列B中的单元格写入另一个文本文件,将列B中的单元格写入另一个文本文件,以此类推。
# coding=utf-8
import openpyxl
wb = openpyxl.load_workbook('D:\\PythonCodes\\example_.xlsx')
sheet = wb.active
with open('example_1.txt', 'w') as f1:
for i in range(1, sheet.max_row + 1):
f1.write(sheet.cell(row=i, column=1).value)
f1.close()
with open('example_2.txt', 'w') as f2:
for i in range(1, sheet.max_row + 1):
f2.write(sheet.cell(row=i, column=2).value)
f2.close()
with open('example_3.txt', 'w') as f3:
for i in range(1, sheet.max_row + 1):
f3.write(sheet.cell(row=i, column=3).value)
f3.close()
我是快斗,程序不一定是最简洁最好用的,欢迎大家的批评指正!