1.1 xlrd的使用
方法 |
功能 |
xlrd.open_wordbook(name) |
打开excel表格 |
book.nsheets |
获取工作表的个数 |
book.sheet_names() |
获取工作表的名字 |
book.sheets()[index] |
通过索引获取工作表 |
book.sheet_by_index(index) |
通过索引获取工作表 |
book.sheet_by_name(name) |
通过工作表名获取工作表 |
book.sheet_loaded(name) |
判断工作表是否存在 |
book.sheet_loaded(index) |
判断工作表是否存在 |
book.sheet_loaded(name or index) |
判断工作表是否存在 |
1.2 对行数据的操作
方法 |
功能 |
sheet_one.nrows |
获取工作表有效总行数 |
sheet_one.row(index) |
获取第几行 |
sheet_one.row_slice(row,start_colx=0, end_colx=None) |
获取第row行到第colx列的内容 |
sheet_one.row_types(rowx, start_colx=0, end_colx=None) |
查看第row行第colx列的数据类型(对照表见下图) |
sheet_one.row_values(rowx, start_colx=0, end_colx=None) |
查看第row行第colx列的值 |
sheet_one.row_len(rows) |
查看第row行的有效值 |
1.3 对列数据的操作
方法 |
功能 |
sheet_one.ncols |
读取工作表的有效列数 |
sheet_one**.**col(colx, start_rowx=0,end_rowx=None) |
获取第colx列第m行到第n行的数据 |
sheet_one**.**col_slice(colx, start_rowx=0,end_rowx=None) |
获取第colx列到第row行的内容 |
sheet_one.col_types(colx, start_rowx=0,end_rowx=None) |
查看第colx列第row行的数据类型(对照表见下图) |
sheet_one.col_values(colx, start_rowx=0,end_rowx=None) |
查看第colx列第row行的值 |
1.4 数据类型对照表
ctype |
|
0 |
empty(空值) |
1 |
string |
2 |
number |
3 |
data(日期) |
4 |
boolean |
5 |
error(错误) |
1.5 对单元格数据的操作
方法 |
功能 |
sheet_one.cell(row,col) |
获取第row行,第col列的内容 |
sheet_one.cell_value(row,col) |
获取第row行,第col列的内容 |
sheet_one.cell(row,col).value |
获取第row行,第col列的内容 |
sheet_one.cell_type(row,col) |
获取第row行,第col列的数据类型 |
sheet_one.cell(row,col).ctype |
获取第row行,第col列的数据类型 |
1.6 对合并单元格的操作
方法 |
功能 |
sheet1.merged_cells |
获取合并单元格的索引(开始行,结束行,开始列,结束列) |
sheet1.cell_value(row,col) |
获取row行,col列的数据 |
sheet1.cell(row,col).value |
获取row行,col列的数据 |
sheet1.cell(row,col).ctype |
获取row行,col列的数据类型 |
1.6 案例:将表格转化为指定列表格式
- 知识点
- 将数据转发为时间格式:
xlrd.xldate_as_datetime
- 将数据转发为时间格式:
date.strftime('%Y-%m-%d %H:%M:%S')
import xlrd
import datetime
book=xlrd.open_workbook('class_info.xls')
table=book.sheet_by_index(0)
key=table.row_values(0)
row_num=table.nrows
col_num=table.ncols
class_info_data=[]
for i in range(1,row_num):
table_data={}
for j in range(1,col_num):
c_value=table.cell(i,j).value
c_type=table.cell_type(i,j)
if c_type==2 and c_value%1==0:
c_value=int(c_value)
elif c_type==3:
c_value=date.strftime('%Y-%m-%d %H:%M:%S')
table_data[key[j]]=c_value
class_info_data.append(table_data)
print(class_info_data)
2.1 xlwt 的使用
-
导包:import xlwt
-
创建工作簿:xlwt.Workbook(encoding='utf-8')
-
添加sheet文件并指定为可覆盖的:workbook.add_sheet('sheet1',cell_overwrite_ok=True)
-
在指定行列写入数据:worksheet.write(row,col,label)
-
保存工作簿:workbook.save(path)
2.2 excel 表格字体样式的设置
-
xlwt中有XFStyle这个库来对单元格的样式进行规范操作,所以当我们想要设置单元格样式时,通常需要先实例化XFStyle类,以便于调用该类的方法。
style=xlwt.XFStyle() |
创建格式对象 |
Formatting.Font() |
字体设置 |
Formatting.Alignment() |
对齐设置 |
Formatting.Borders() |
边框设置 |
Formatting.Pattern() |
背景颜色设置 |
字体样式设置 |
|
xlwt.Font() |
创建字体对象 |
xlwt.Font().name=‘name’ |
设置字体 |
xlwt.Font().bold=True |
设置加粗(True是加粗,False是不加粗) |
xlwt.Font().underline=True |
设置下划线 |
xlwt.Font().italic=True |
设置倾斜 |
xlwt.Font().color=‘十六进制数’ |
设置字体颜色 |
xlwt.Font().colour_index=number |
根据颜色索引设置颜色 |
xlwt.Font().size=number |
设置字体大小 |
xlwt.Font().height=number |
设置行高 |
xlwt.Font().struck_out=True |
设置删除线 |
worksheet.col(index).width=256*m |
设置单元格宽度 |
import xlrd
import xlwt
workbook=xlwt.Workbook(encoding='utf-8')
worksheet=workbook.add_sheet('sheet1',cell_overwrite_ok=True)
style=xlwt.XFStyle()
font=xlwt.Font()
font.name='Yu Gothic Light'
font.bold=True
font.underline=True
font.italic=True
font.color='FF000000'
font.colour_index=0
font.size=10
font.heigt=300
font.struck_out=True
style.font=font
worksheet.write(0,0,'姓名',style)
worksheet.write(1,0,'小明')
worksheet.col(0).width=256*20
workbook.save('test1.xls')
2.2 excel 表格边框样式的设置
边框位置 |
|
xlwt.Borders() |
创建边框对象 |
xlwt.Borders().top |
设置上边框 |
xlwt.Borders().bottom |
设置下边框 |
xlwt.Borders().left |
设置左边框 |
xlwt.Borders().right |
设置右边框 |
边框格式 |
|
NO_LINE=0x00 |
保持默认 |
THIN=0x01 |
实线 |
DASHED=0x03 |
虚线 |
MEDIUM=0x02 |
中等线 |
DOTTED=0x04 |
点状线 |
THICK=0x05 |
加粗线 |
DOUBLE=0x06 |
双线 |
HAIR=0x07 |
|
import xlwt
style=xlwt.XFStyle()
border=xlwt.Borders()
border.top=xlwt.Borders.THIN
border.bottom=xlwt.Borders.DASHED
border.left=xlwt.Borders.NO_LINE
style.borders=border
2.3 设置excel对齐方式
对齐方式 |
|
xlwt.Alignment() |
创建对齐对象 |
xlwt.Alignment().horz |
水平对齐 |
xlwt.Alignment().vert |
垂直对齐 |
水平和垂直的对齐方式 |
|
HORZ_GENERAL=0x00 |
|
HORZ_LEFT=0x01 |
左对齐 |
HORZ_CENTER=0x02 |
居中对齐 |
HORZ_RIGHT=0x03 |
右对齐 |
HORZ_FILLED=0x04 |
|
HORZ_JUSTIFIFD=0x05 |
两端对齐 |
HORZ_CENTER_ACROSS_SEL=0x06 |
|
HORZ_DISTRIBUTED=0x07 |
分散对齐 |
VERT_TOP=0x00 |
上对齐 |
VERT_CENTER=0x01 |
居中对齐 |
VERT_BOTTOM=0x02 |
下对齐 |
VERT_JUSTIFIED=0x03 |
两端对齐 |
VERT_DISTRIBUTED=0x04 |
分散对齐 |
import xlwt
style=xlwt.XFStyle()
alignment=xlwt.Alignment()
alignment.horz=xlwt.Alignment.HORZ_CENTER
alignment.vert=xlwt.Alignment.VERT_CENTER
alignment.vert=0x02
style.alignment=alignment
2.4 设置excel背景填充色
|
|
xlwt.Pattern() |
创建背景对象 |
xlwt.Pattern().pattern |
设置背景,比如实心填充xlwt.Pattern().SOLID_PATTERN |
xlwt.Pattern().pattern_fore_colour |
设置背景颜色(可直接填写颜色索引) |
颜色索引 |
|
0 |
black |
1 |
white |
2 |
red |
3 |
green |
4 |
blue |
5 |
yellow |
6 |
magenta |
7 |
cyan |
import xlwt
style=xlwt.XFStyle()
pattern=xlwt.Pattern()
pattern.pattern=xlwt.Pattern.SOLID_PATTERN
pattern.pattern_fore_colour=2
style.pattern=pattern
2.5 综合案例
import xlwt
wb=xlwt.Workbook()
ws=wb.add_sheet('sheet1',cell_overwrite_ok=True)
style=xlwt.XFStyle()
font=xlwt.Font()
font.name='微软雅黑'
font.bold=True
style.font=font
border=xlwt.Borders()
border.top=xlwt.Borders.THIN
border.bottom=xlwt.Borders.THIN
border.left=xlwt.Borders.DASHED
border.right=xlwt.Borders.DASHED
style.borders=border
alignment=xlwt.Alignment()
alignment.horz=xlwt.Alignment.HORZ_CENTER
alignment.vert=xlwt.Alignment.VERT_CENTER
style.alignment=alignment
pattern=xlwt.Pattern()
pattern.pattern=xlwt.Pattern.SOLID_PATTERN
pattern.pattern_fore_colour=5
style.pattern=pattern
ws.write(0,0,'name',style)
ws.write(0,1,'age',style)
ws.write(1,0,'小明')
ws.write(1,1,18)
wb.save('test.xlsx')
3.1 openpyxl 的基本使用
|
|
wb=Workbook() |
创建工作簿对象 |
wb.active |
获取工作表 |
wb.create_sheet(‘name’,index) |
在指定位置插入工作表,默认在最后 |
ws.title=name |
修改工作表名称 |
ws.sheet_properties.tabColor=‘1072BA’ |
设置工作表按键颜色 |
wb.sheetnames |
查看工作簿的所有工作表(list) |
wb.copy_worksheet(sheet) |
复制sheet工作表(表格中的图片或图片或工作簿在只读或只写模式下是不可复制的) |
3.2 访问单元格
ws为工作表,wb为工作簿 |
|
ws[‘A1’]=‘str’ |
通过单元格位置给单元格赋值,A1表示位置 |
ws.cell.(row=,column=,value=) |
通过函数给单元格赋值 |
ws[‘A1’:'C2] |
访问多个单元格 |
ws[‘C’] |
访问C列 |
ws[‘C:D’] |
获取CD两列 |
ws[row] |
获取row行 |
ws[m:n] |
获取m到n行 |
ws.iter_rows(min_row=1,max_row=2,max_col=3,values_only=True) |
获取第1、2行的前三行,先读行再读列,values_only=True为只获取单元格的值 |
ws.iter_cols(min_row=1,max_row=2,max_col=3,values_only=True) |
获取第1、2行的前三列,先读列再读行,values_only=False为获取单元格对象 |
3.3 获取单元格的值与赋值
遍历文件所有的行和列 |
返回生成器 |
ws.rows tuple(ws.rows) |
遍历所有的行 |
ws.columns |
遍历所有的列 |
ws.values |
获取ws对象中的单元格值 |
ws[‘A1’].value=‘str’ |
修改单元格的值 |
3.4 打开工作表
from openpyxl import load_workbook
wb=load_workbook('weather_expectation.xlsx')
3.5 创建工作表
from openpyxl import Workbook
wb=Workbook()
ws1=wb.active
ws1.title='sheet1'
li_v=[['name','age','gender'],['amy',18,'girl'],['lisa',19,'girl']]
for li in li_v:
ws1.append(li)
wb.save('test2.xlsx')
from openpyxl import Workbook
wb=Workbook()
ws2=wb.create_sheet(title='data')
for row in range(1,10):
for col in range(1,10):
c=ws2.cell(row=row,column=col,value='{}'.format(row*col))
wb.save('test3.xls')
3.6 日期格式及插入公式
-
时间格式
import datetime
from openpyxl import Workbook
wb=Workbook()
ws=wb.active
ws['A1']=datetime.datetime(2020,6,20)
ws['A1'].number_format='yyyy-mm-dd hh:mm:ss'
wb.save('date.xlsx')
-
插入公式
from openpyxl import Workbook
wb=Workbook()
ws=wb.active
ws['A2']="=SUM(1,1)"
wb.save('date.xlsx')
3.7 合并与取消合并单元格
from openpyxl import Workbook
wb=Workbook()
ws=wb.active
ws.merge_cells('A1:C1')
ws.merge_cells(start_row=2,end_row=5,start_column=1,end_column=3)
ws.unmerge_cells('A1:C1')
wb.save('合并.xlsx')
3.8 插入图片
from openpyxl import Workbook
from openpyxl.drawing.image import Image
wb=Workbook()
ws=wb.active
img=Image('1.png')
ws.add_image(img,'A1')
wb.save('保存图片.xlsx')
3.9折叠
from openpyxl import Workbook
wb=Workbook()
ws=wb.active
ws.column_dimensions.group('A','D',hidden=True)
ws.row_dimensions.group(1,10,hidden=True)
wb.save('折叠.xlsx')
3.10 删除插入移动行与列
-
插入行和列
from openpyxl import Workbook
wb=Workbook()
ws=wb.active
li_v=[['name','age','gender'],['amy',18,'girl'],['lisa',19,'girl']]
for li in li_v:
ws.append(li)
ws.insert_rows(1)
ws.insert_cols(1)
ws.merge_cells('B1:D1')
ws['B1']='班级信息'
ws.move_range('B3:D3',rows=-2,cols=2)
ws.delete_cols(1)
ws.delete_rows(1)
wb.save('插入.xlsx')
3.11 绘制图表
-
绘制条形图
from openpyxl import Workbook
from openpyxl.chart import BarChart,Reference
import copy
wb=Workbook()
ws=wb.active
rows=[
('number','batch','batch2'),
(2,10,30),
(3,40,60),
(4,50,70),
(5,20,10),
(6,10,40),
(7,50,30),
]
for row in rows:
ws.append(row)
chart1=BarChart()
chart1.type='col'
chart1.style=14
chart1.title='Bar Chart'
chart1.y_axis.title='Test number'
chart1.x_axis.title='Sample length(mm)'
data=Reference(ws,min_col=2,max_col=3,min_row=1,max_row=7)
cats=Reference(ws,min_col=1,min_row=2,max_row=7)
chart1.add_data(data,titles_from_data=True)
chart1.set_categories(cats)
ws.add_chart(chart1,'A10')
chart2=copy.deepcopy(chart1)
chart2.style=11
chart2.type='bar'
chart2.title='HBar chart'
ws.add_chart(chart2,'G10')
wb.save('绘制图表.xlsx')
-
绘制折线图
from openpyxl import Workbook
from datetime import date
from openpyxl.chart import LineChart,Reference
wb = Workbook()
ws = wb.active
rows = [
['Date', 'Batch 1', 'Batch 2', 'Batch 3'],
[date(2015,9, 1), 40, 30, 25],
[date(2015,9, 2), 40, 25, 30],
[date(2015,9, 3), 50, 30, 45],
[date(2015,9, 4), 30, 25, 40],
[date(2015,9, 5), 25, 35, 30],
[date(2015,9, 6), 20, 40, 35],
]
for row in rows:
ws.append(row)
chart1 = LineChart()
chart1.title = "Line Chart"
chart1.y_axis.title = "Size"
chart1.x_axis.title = "Test Number"
chart1.style = 13
data = Reference(ws,min_row=1,max_row=7,min_col=2,max_col=4)
chart1.add_data(data,titles_from_data=True)
s1 = chart1.series[0]
s1.marker.symbol = "triangle"
s1.marker.graphicalProperties.solidFill = "FF0000"
s1.marker.graphicalProperties.line.solidFill = "FF0000"
s1.graphicalProperties.line.noFill = True
s2 = chart1.series[1]
s2.graphicalProperties.line.solidFill = "00AAAA"
s2.graphicalProperties.line.dashStyle = "sysDot"
s2.graphicalProperties.line.width = 100050
s3 = chart1.series[2]
s3.smooth = True
ws.add_chart(chart1,"A10")
wb.save("line.xlsx")
-
绘制扇形图
from openpyxl import Workbook
from openpyxl.chart import PieChart,Reference
from openpyxl.chart.series import DataPoint
wb = Workbook()
ws = wb.active
data = [
['Pie', 'Sold'],
['Apple', 50],
['Cherry', 30],
['Pumpkin', 10],
['Chocolate', 40],
]
for row in data:
ws.append(row)
pie = PieChart()
labels = Reference(ws,min_col=1,min_row=2,max_row=5)
data = Reference(ws,min_col=2,min_row=1,max_row=5)
pie.add_data(data,titles_from_data=True)
pie.set_categories(labels)
pie.title = "Pies"
slice = DataPoint(idx=0,explosion=200)
pie.series[0].data_point = [slice]
ws.add_chart(pie,"D10")
wb.save("pie.xlsx")