Python让繁琐工作自动化——chapter12 处理Excel电子表格

1. 基本语法

(1)模块导入

import openpyxl

(2)读取表格

wb = openpyxl.load_workbook('文本文件到表格.xlsx')
sheet = wb.get_active_sheet()                        #获得当前sheet表

(3)写入表格

wb = openpyxl.Workbook()             #创建一个workbook对象
sheet = wb.get_active_sheet()
sheet.title = '12.13.1.xlsx'         #创建sheet名字
wb.save( '12.13.1.xlsx')

(4)常用函数

rowmax = sheet.max_row               #当前表格最大行数
clnmax = sheet.max_column            #当前表格最大列数
from openpyxl.styles import Font          #字体修改函数
fontobj = Font(name = 'Times New Roman' , size = 24,bold = True, italic = True)     #字体名称,字号,粗体,斜体
sheet['A3'].font =fontobj
sheet.row_dimensions[1].height =70   #修改行高
sheet.column_dimensions['B'].width = 20  #修改列宽
#图表
refobj = openpyxl.chart.Reference(sheet,(1,1),(10,1))              #创建Reference对象  (表格对象,左上角起始数据,右下角结束数据位置)
seriesobj = openpyxl.chart.Series(refobj,title = 'First Series')   #创建Series对象
chartobj = openpyxl.chart.BarChart()                               #图表类型 :  .lineChart  ScatterChar  PieChart 折线图、散点图、饼图
chartobj.append(seriesobj)                                         #添加数据构成图表




2.课后习题

1. 创建乘法表

    输入N,创建N*N的乘法表

import openpyxl
from openpyxl.styles import Font

wb = openpyxl.Workbook()
sheet = wb.get_active_sheet()
sheet.title = '12.13.1.xlsx'
n = int(input("创造一个N行N列的乘法表,请输入N: "))   #注意int类型!!

fontobj = Font(bold = True)

for i in range(1,n+1): #其中一行一列表示乘数
    sheet.cell(row = 1,column = i+1).value = i
    sheet.cell(row=1, column=i + 1).font = fontobj  #第一行粗体
    sheet.cell(row = i+1,column = 1).value = i
    sheet.cell(row=i + 1, column=1).font = fontobj  #第一列粗体
    for j in range(2,i+2):
        for k in range(2,i+2):
            sheet.cell(row = j,column = k).value = (j-1)*(k-1)

sheet['A1'] = None
wb.save( '12.13.1.xlsx')

2. 空行插入程序

    输入两个整数N,M,程序从第N行开始,在电子表格中插入M个空行

import openpyxl
from openpyxl.styles import Font

wb = openpyxl.Workbook()
sheet = wb.get_active_sheet()
sheet.title = '12.13.1.xlsx'
n = int(input("创造一个N行N列的乘法表,请输入N: "))   #注意int类型!!

fontobj = Font(bold = True)

for i in range(1,n+1): #其中一行一列表示乘数
    sheet.cell(row = 1,column = i+1).value = i
    sheet.cell(row=1, column=i + 1).font = fontobj  #第一行粗体
    sheet.cell(row = i+1,column = 1).value = i
    sheet.cell(row=i + 1, column=1).font = fontobj  #第一列粗体
    for j in range(2,i+2):
        for k in range(2,i+2):
            sheet.cell(row = j,column = k).value = (j-1)*(k-1)

sheet['A1'] = None
wb.save( '12.13.1.xlsx')

3. 电子表格翻转程序

    将电子表格中所有行列翻转,如第5行3列→第3行第5列

(思想:利用嵌套for循环将每个单元格的数据读入一个二维列表)

import openpyxl

wb = openpyxl.load_workbook('12.13.2.xlsx')
sheet1 = wb.get_active_sheet()
nb = openpyxl.Workbook()
sheet2 = nb.get_active_sheet()

rowmax = sheet1.max_row
clmmax = sheet1.max_column

#二维列表创建方法
sheetdata = [[0 for col in range(clmmax)] for row in range(rowmax)]   #创建二位列表存储原数据
for i in range(1,rowmax+1):
    for j in range(1,clmmax+1):
        sheetdata[i-1][j-1] = sheet1.cell(row = i, column = j).value
        sheet2.cell(row = j, column = i).value = sheetdata[i-1][j-1]

nb.save('12.13.3 单元格翻转.xlsx')

#附二位列表初始化方法2
# nums = []
# rows = eval(input("请输入行数:"))
# columns = eval(input("请输入列数:"))
#
# for row in range(rows):
#     nums.append([])
#     for column in range(columns):
#         num = eval(input("请输入数字:"))
#         nums[row].append(num)
# print(nums)

4. 文本文件到表格 

    读入几个文本中的文件,将这些内容插入到一个Excel中,每一列表示一个文件,每一行表示一个文件的一行文本内容,如第一个文件共五行,应占据表格第一列的前五行,第二个文件共两行,应占据表格第二列的前两行

import openpyxl
import os

txtfiles = []    #找到当前目录所有的txt文件
for txt in os.listdir('.'):
    if txt.endswith('.txt'):
        txtfiles.append(txt)

wb = openpyxl.Workbook()
sheet = wb.get_active_sheet()

j=1
for file in txtfiles:
    txt = open(file,'r')
    i = 1                                #第二列从第一行重新开始
    for line in txt.readlines():
        sheet.cell(row = i,column =j ).value = line
        i += 1
    j += 1

wb.save('文本文件到表格.xlsx')

5. 电子表格到文件

    和前一个程序相反,将第一列的内容写入一个文件,将第二列的内容写入一个文件

import openpyxl

wb = openpyxl.load_workbook('文本文件到表格.xlsx')
sheet = wb.get_active_sheet()

rowmax = sheet.max_row
clnmax = sheet.max_column

for i in range(1,clnmax+1):
    f = open('file'+str(i)+'txt','w')   #创建新的txt文件
    for j in range(1,rowmax+1):
        content = sheet.cell(row = j ,column = i).value
        if content != None:          #一定要记得 判断 内容 是否为空!!
            f.write(content)
    f.close()



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值