打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python实现自动化办公(一):Python对Excel的基本操作(openpyxl)

Python制作JOJO石之海人物信息表😆

文章目录

  • Python制作JOJO石之海人物信息表😆
  • 一、Excel的读与写
    • 1、xlwt和wlrd的安装
    • 2、xlwt模块
      • (1)、基本函数
      • (2)、使用案例
        • (xlwt写入JOJO石之海人物信息表)
      • (3)、局限性
    • 3、xlrd模块
      • (1)、基本函数
      • (2)、使用案例
  • 二、xlsxwriter模块
    • 1、安装
    • 2、基本函数
    • 3.使用案例
  • 三、⭐openpyxl模块⭐
    • 1、安装
    • 2、基本函数
      • (1)、导包(Workbook、load_workbook与Font)
      • (2)、Workbook
      • (3)、load_workbook
    • 3、使用方法(案例)
      • (1)、遍历Excel工作表(或指定区域)
      • (2)、多页工作表、设置字体
      • (3)、单元格格式
      • (4)、⭐制作JOJO石之海人物信息表⭐

一、Excel的读与写

Python中有2个基本的Excel操作库:xlwtxlrd,用着不方便,但是也能用,而且xlwt和xlrd较直观地体现了Python对Excel的基本操作流程。

1、xlwt和wlrd的安装

pip3 install xlwt
pip3 install xlrd==1.2.0

如果在xlrd的使用中出现如下错误:

raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+'; not supported')
xlrd.biffh.XLRDError: Excel xlsx file; not supported
#即不支持Excel xlsx文件

解决方法为:

pip3 uninstall xlrd
pip3 install xlrd==1.2.0

2、xlwt模块

xlwt即Excel write,是一个Python的写入Excel的库。

(1)、基本函数

新建Excel文件:new_book = xlwt.Workbook()
新建工作表:sheet = new_book.add_sheet('xxx')
设置单元格宽度:sheet.col(y).width = num # num为数字
写入内容:sheet.write(r = x,c = y,label = 'xx')

其中r为行(row) c为列(col) 内容为label,且Excel中的第一行和第一列在python中都为0。

保存Excel文件:new_book.save('new_excel.xls')
等等。。。。。。

(2)、使用案例

例一:

import xlwt   # 导入xlwt库

new_book = xlwt.Workbook()   # 新建Excel文件
sheet = new_book.add_sheet('sheet1')   # 新建工作表

sheet.write(r = 0,c = 0,label = 'csdn')   #行rel 列col 内容label
sheet.write(r = 0,c = 1,label = '笠li笠')
new_book.save('new_excel.xls')   # 保存Excel文件

效果如下图所示:

(xlwt写入JOJO石之海人物信息表)

import xlwt   # 导入xlwt库

new_book = xlwt.Workbook()   # 新建Excel文件
sheet = new_book.add_sheet('jojo_sheet')   # 新建工作表

name_a = input('请输入你的姓名:')
year_a = input('请输入你的年龄:')
sub_a = input('请输入你的替身名称:')

start_list = ['姓名','年龄','替身']
name_list = [
        '空条徐伦',
        '空条承太郎',
        '艾梅斯·克斯提洛',
        'F·F(幽浮一族)',
        '威斯·布鲁马林',
        '安波里欧·亚曼纽',
        '纳鲁西索·安娜苏',
        '恩里克·普奇(神父)'
]
year_list = [
        '19',
        '41',
        '21',
        '2',
        '39(享年)',
        '11',
        '25',
        '39'
]
sub_list = [
        '石之自由',
        '白金之星',
        'Kiss(亲吻)',
        '本体',
        '天气预报',
        '放火烧厝、天气预报(DISC)',
        '潜行者',
        '白蛇、新月、天堂制造'
]

name_list.append(name_a)   # 添加name_a至name_list列表
year_list.append(year_a)   # 添加year_a至year_list列表
sub_list.append(sub_a)     # 添加sub_a至sub_list列表

sheet.col(0).width = 4444   # 设置单元格宽度
sheet.col(1).width = 3333   # 设置单元格宽度
sheet.col(2).width = 6666   # 设置单元格宽度

font = xlwt.Font()      # 创建字体样式
font.bold = True        # 字体加粗

alignment = xlwt.Alignment()   # 创建单元格对齐方式样式
alignment.horz = 0x02          # 选择居中

style_one = xlwt.XFStyle()  # 初始化样式
style_one.font = font       # 字体
style_one.alignment = alignment # 对齐

style_two = xlwt.XFStyle()  # 初始化样式
style_two.alignment = alignment # 对齐

for col_num in range(0,3):   # 第一行,加粗(style)
    sheet.write(0, col_num, start_list[col_num], style_one)

for col_num in range(0,3):
  num = 1
  if col_num == 0:
    for name in name_list:
      sheet.write(num, col_num, name, style_two)   #行rel 列col 内容label
      num = num + 1
  if col_num == 1:
    for year in year_list:
      sheet.write(num, col_num, year, style_two)   #行rel 列col 内容label
      num = num + 1
  if col_num == 2:
    for sub in sub_list:
      sheet.write(num, col_num, sub, style_two)   #行rel 列col 内容label
      num = num + 1

new_book.save('JOJO石之海.xls')   # 保存Excel文件

效果如下图所示:


(3)、局限性

xlwt本身有其局限性,其只能保存xls类型文件,无法保存xlsx文件,否则会出现下图所示的错误。且xlwt不支持256列以上的编辑,错误如下图所示。


3、xlrd模块

xlrd即Excel read,和xlwt一样,Excel中的第一行和第一列在python中都为0。

(1)、基本函数

打开Excel文件:xl = xlrd.open_workbook('xx.xlsx')
获取对应工作表对象(1):table = xl.sheet_by_name('xx')
获取对应工作表对象(2):table = xl.sheet_by_index(num) # num为序号,从0开始第几工作表
获取所有工作表:nms = xl.sheet_names()
获取单元格对象(1):cell = table.cell(x,y)
获取单元格的值:cell.value
获取行信息:table.row(x)
获取列信息:table.col(y)
获取单元格对象(2):table.row(x)[y]

(2)、使用案例

例:

import xlrd

xl = xlrd.open_workbook('JOJO石之海.xls')
table = xl.sheet_by_name('jojo_sheet')

cell = table.cell(0,0)

print('cell:',cell,'\n')
print('cell.value:',cell.value,'\n')
print('table.cell_value(x,y):',table.cell_value(0,0),'\n')
print('table.row(x):',table.row(0),'\n')
print('table.col(y):',table.col(1),'\n')
print('table.row(x)[y]:',table.row(0)[0],'\n')
nms = xl.sheet_names()  # 获取所有工作表
print(nms)

效果如下图所示:

二、xlsxwriter模块

xlsxwriter相较于xlwt模块,没有其无法保存xlsx文件的缺陷,也支持256列以上的编辑,使用起来也较为方便。

1、安装

pip3 install xlsxwriter

2、基本函数

新建Excel文件:new_book = xlsxwriter.Workbook('xx.xlsx’)
新建工作表:sheet = new_book.add_worksheet('xxx')
写入内容:sheet.write(x,y, 'xx')
关闭工作表:new_book.close()

3.使用案例

例:

import xlsxwriter

new_book = xlsxwriter.Workbook('li.xlsx')
sheet = new_book.add_worksheet('li')
sheet.write(300,300,'哈哈')
new_book.close()

效果如图所示:

三、⭐openpyxl模块⭐

1、安装

pip3 install openpyxl

2、基本函数

(1)、导包(Workbook、load_workbook与Font)

from openpyxl import Workbook	#可用于创建新的excel
from openpyxl import load_workbook	#可用于打开excel
from openpyxl.styles import Font   # 可用于设置字体
from openpyxl.styles import Alignment   # 可用于设置单元格格式

(2)、Workbook

实例化,新建一个Excel的准备:wb = Workbook()
激活sheet:sheet = wb.active
更改sheet的标题:sheet.title = 'xx' # 第一个工作表
创建工作表(继第一个sheet再增加工作表):sheet = wb.create_sheet('xx')
选择工作表(1):work = wb['xx']
选择工作表(2):work = wb.get_sheet_by_name('xx')
获取所有工作表:wb.sheetnames
单元格写入内容:sheet['xy'] = xx # 'xy'为单元格的坐标,如A1,xx为写入的内容
单元格输入公式:sheet['xy'] = '=公式'
在当前已写入的最后一行的下一行写入行内容:sheet.append([xx,xx,xx,......])
设置字体:font = Font(name='xx', bold=True, italic=True, size=num)
保存Excel文件:wb.save('xx.xlsx')

(3)、load_workbook

打开已有的excel:wb = load_workbook('xx.xlsx')
查看当前excel中sheet的名字:wb.sheetnames=wb.get_sheet_names()
选择工作表(1):work = wb['xx']
选择工作表(2):work = wb.get_sheet_by_name('xx')
获取当前单元格内容:sheet['xy'].value

3、使用方法(案例)

(1)、遍历Excel工作表(或指定区域)

要遍历Excel工作表要先遍历行,再遍历列。代码如下:

from openpyxl import load_workbook	#可用于打开excel

wb = load_workbook('JOJO石之海.xlsx')
sheet = wb['jojo_sheet']

for row in sheet:
   for cell in row:
       print(cell.value,end = '   ')
   print('\n')

效果如下所示:

(2)、多页工作表、设置字体

设置字体:font = Font(name='xx', bold=True, italic=True, size=num)

其中 name:字体类型;bold:字体是否粗体;italic:字体是否为斜体;size:字体大小

案例代码如下:

from openpyxl import Workbook	#可用于创建新的Excel
from openpyxl.styles import Font   # 可用于设置字体

wb = Workbook()   # 实例化

sheet_a = wb.active   # 激活sheet
sheet_a.title = 'a'   # 更改sheet的标题
sheet_b = wb.create_sheet('b')   # 添加工作表

# 定义字体类型
font_1 = Font(name='宋体', bold=True, italic=False, size=14)
font_2 = Font(name='等线', bold=False, italic=True, size=14)

sheet_a['A1'] = '笠li笠'

sheet_a['B1'].font = font_1   # 设置单元格字体
sheet_a['B1'] = '笠li笠'

sheet_a['C1'].font = font_2
sheet_a['C1'] = '笠li笠'

sheet_b['A1'].font = font_1   # 设置单元格字体
sheet_b['A1'] = '笠li笠'

sheet_b['B1'].font = font_1
sheet_b['B1'] = '19'

sheet_b['C1'].font = font_2
sheet_b['C1'] = '♪(^∇^*)'

sheet_b.append(['笠li笠',19,'♪(^∇^*)'])   # 最后一行后面再添加新的一行

wb.save('ab.xlsx')

效果如下图所示:


(3)、单元格格式

调整列尺寸:sheet.column_dimensions['y'].width = num # (4)案例
调整行尺寸:sheet.row_dimensions[x].height = num
设置单元格居中:alignment = Alignment(horizontal='center', vertical='center')
设置单元格合并:sheet.merge_cells('x1y1:x2y2')
案例代码如下:

from openpyxl import Workbook	#可用于创建新的Excel
from openpyxl.styles import Alignment   # 可用于设置单元格格式

wb = Workbook()   # 实例化
alignment = Alignment(horizontal='center', vertical='center')

sheet_a = wb.active   # 激活sheet
sheet_a.title = 'a'   # 更改sheet的标题

sheet_a['A1'].alignment = alignment   # 定义单元格格式

sheet_a['A1'] = '笠li笠'
sheet_a.merge_cells('A1:C1')   # 合并单元格A1至C1

wb.save('a.xlsx')

效果如下图所示:

(4)、⭐制作JOJO石之海人物信息表⭐

案例代码如下:

from openpyxl import Workbook	#可用于创建新的Excel
from openpyxl.styles import Font   # 可用于设置字体
from openpyxl.styles import Alignment   # 可用于设置单元格格式

wb = Workbook()   # 实例化
alignment = Alignment(horizontal='center', vertical='center')
font_c = Font(name='宋体', bold=True, italic=False, size=11)
font = Font(name='宋体', bold=False, italic=False, size=11)

#------------------# DIO
dio = []
name = input('你的名字:')
year = input('你的年龄:')
sub = input('你的替身:')
dio.append(name)
dio.append(year)
dio.append(sub)
#------------------#

info = [
        ['空条徐伦','19','石之自由'],
        ['空条承太郎','41','白金之星'],
        ['艾梅斯·克斯提洛','21','Kiss(亲吻)'],
        ['F·F(幽浮一族)','2','本体'],
        ['威斯·布鲁马林','39(享年)','天气预报'],
        ['安波里欧·亚曼纽','11','放火烧厝、天气预报(DISC)'],
        ['纳鲁西索·安娜苏' ,'25','潜行者'],
        ['恩里克·普奇(神父)','39','白蛇、新月、天堂制造']
       ]
info.append(dio)

sheet = wb.active   # 激活sheet
sheet.title = 'jojo_sheet'   # 更改sheet的标题

sheet.append(['姓名','年龄','替身'])   # 添加第一行

#------------------# 设置第一行居中粗体
for row in sheet['A1:C1']:   # 遍历第一行
  for cell in row:
    cell.alignment = alignment   # 设置单元格居中
    cell.font = font_c   # 设置单元格字体粗体
#------------------#

#------------------# 调整列宽
sheet.column_dimensions['A'].width = 20
sheet.column_dimensions['B'].width = 11
sheet.column_dimensions['C'].width = 28
#------------------#

#------------------# 添加info数据
for new in info:
    sheet.append(new)
#------------------#

#------------------# 设置单元格居中无粗体宋体
area = sheet['A2:C20']   # 定义填写范围
for row in area:         # 遍历area区域进行居中设置
  for cell in row:       # 先遍历行,再遍历列
    cell.font = font   # 设置单元格字体无粗体
    cell.alignment = alignment   # 设置单元格居中
#------------------#

wb.save('JOJO石之海.xlsx')

效果如下所示:


视频效果如下:

Python制作Excel表格

我是一名学生,目前正在学习中,本篇文章是我的学习笔记,如有错误的话还请指正。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python Excel 读写及追加写入(xlrd、xlwt、openpyxl、XlsxWriter)
最全整理!Python 操作 Excel 库 xlrd与xlwt 常用操作详解!
python从入门到实践,文件读写与Excel操作
Python读写EXCEL文件常用方法大全
史上最全Python 操作 Excel库总结!
python处理excel总结
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服