实践出真知 -- 用Python处理Excel的一些实例

实践出真知,这次我们就通过一些实例来巩固一下用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')

运行以上程序并在命令行输入8得到的表格为:
乘法表

二、空行插入程序

创建一个程序,它接手两个整数和一个文件名字符串作为命令行参数,我们将第一个整数称作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')

运行上述代码比对原来的文本文档和得到的Excel文档:
文本文档
将文本文档写入Excel文档

五、电子表格到文本文件

编写一个程序,执行前一个程序相反的任务。该程序应该打开一个电子表格,将列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()

要读取的Excel
得到的文本文档

我是快斗,程序不一定是最简洁最好用的,欢迎大家的批评指正!

  • 16
    点赞
  • 137
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值