Python中有2个基本的Excel操作库:xlwt和xlrd,用着不方便,但是也能用,而且xlwt和xlrd较直观地体现了Python对Excel的基本操作流程。
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
xlwt即Excel write,是一个Python的写入Excel的库。
新建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')
等等。。。。。。
例一:
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文件
效果如下图所示:
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文件
效果如下图所示:
xlwt本身有其局限性,其只能保存xls类型文件,无法保存xlsx文件,否则会出现下图所示的错误。且xlwt不支持256列以上的编辑,错误如下图所示。
xlrd即Excel read,和xlwt一样,Excel中的第一行和第一列在python中都为0。
打开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]
例:
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相较于xlwt模块,没有其无法保存xlsx文件的缺陷,也支持256列以上的编辑,使用起来也较为方便。
pip3 install xlsxwriter
新建Excel文件:new_book = xlsxwriter.Workbook('xx.xlsx’)
新建工作表:sheet = new_book.add_worksheet('xxx')
写入内容:sheet.write(x,y, 'xx')
关闭工作表:new_book.close()
例:
import xlsxwriter
new_book = xlsxwriter.Workbook('li.xlsx')
sheet = new_book.add_worksheet('li')
sheet.write(300,300,'哈哈')
new_book.close()
效果如图所示:
pip3 install openpyxl
from openpyxl import Workbook #可用于创建新的excel
from openpyxl import load_workbook #可用于打开excel
from openpyxl.styles import Font # 可用于设置字体
from openpyxl.styles import Alignment # 可用于设置单元格格式
实例化,新建一个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')
打开已有的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
要遍历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')
效果如下所示:
设置字体: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')
效果如下图所示:
调整列尺寸: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')
效果如下图所示:
案例代码如下:
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表格
我是一名学生,目前正在学习中,本篇文章是我的学习笔记,如有错误的话还请指正。
联系客服