版本:python 3.6.8
所需要的模块
pip3 install openpyxl
import openpyxl
生成工作簿对象
wb = openpyxl.load_workbook(‘example.xlsx’)
wb = openpyxl.load_workbook(‘example.xlsx’)
type(wb)
生成工作表对象
1、获取该工作簿上面的所有工作表的名称
wb.get_sheet_names()
2、生成指定工作表对象
sheet = wb.get_sheet_by_name(‘Sheet1’)
sheet = wb[‘Sheet’]
sheet=wb.get_active_sheet()【在这个版本中出错】
sheet = wb.active
3、获取工作表的属性
3.1获取工作表的总行数、总列数
sheet.get_highest_row()【在这个版本中出错】
sheet.get_highest_column()【在这个版本中出错】
sheet.max_row
sheet.max_column
3.2获取、修改工作表的名称
sheet.title
sheet.title=‘abc’
3.3返回两个生成器,可以通过迭代来访问所有区域内的单元格
sheet.rows
sheet.columns
访问这个生成器方式
方式1:【不适合】
sheet.columns[2]
方式2:
list(sheet.columns)[0]
list(sheet.rows)[0]
方式3:
sheet[“A”]
sheet[1]
单元格:
指定单元格并赋值
方式1:
cell=sheet[‘C1’]
cell.value
sheet[‘A1’]=‘abc’
方式2:
cell=sheet.cell(row=1, column=2)
cell.value
sheet.cell(row=1, column=2).value=‘1000’
for xc in range(1,sheet.max_column):
for xr in range(1,sheet.max_row+1):
print(sheet.cell(row=j,column=i).coordinate, sheet.cell(row=j, column=i).value)
单元格位置信息
cell.row
cell.column
cell.coordinate
单元格的数字转换
from openpyxl.cell import get_column_letter, column_index_from_string【不适合该版本】
from openpyxl.utils import get_column_letter, column_index_from_string
#将列数字转换成列字母表示
get_column_letter(1)
get_column_letter(sheet.max_column)
#将列字母转换成数字
column_index_from_string(‘A’)
访问矩形区域里的单元格
for rowOfCellObjects in sheet[‘A1’:‘C3’]:
for cellObj in rowOfCellObjects:
print(cellObj.coordinate, cellObj.value)
访问A列
for cellObj in sheet[“A”]:
print(cellObj.coordinate,cellObj.value)
for i in list(sheet.columns)[0]:
print(i.coordinate,i.value)
访问第1行
for cellObj in sheet[1]:
print(cellObj.coordinate,cellObj.value)
访问所有单元格
from openpyxl.utils import get_column_letter, column_index_from_string
for rowOfCellObjects in sheet[‘A1’:str(get_column_letter(sheet.max_column))+str(sheet.max_row)]:
for cellObj in rowOfCellObjects:
print(cellObj.coordinate, cellObj.value)
新建excel文件或者叫工作簿
wb = openpyxl.Workbook()
sheet = wb.get_active_sheet()
sheet.title
wb.save(‘example_copy.xlsx’)
创建新的sheet
wb = openpyxl.Workbook()
wb.get_sheet_names()
wb.create_sheet()
wb.create_sheet(‘testsheet’)
wb.create_sheet(index=0, title=‘First Sheet’)
wb.get_sheet_names()
删除sheet
wb.remove_sheet(wb.get_sheet_by_name(‘First Sheet’))
设置单元格字体风格
from openpyxl.styles import Font, Style
from openpyxl.styles import Font
函数的参数
size设置字体大小
name字体
italic 字体为斜体
bold 字体加粗
wb=openpyxl.Workbook()
sheet=wb.get_sheet_by_name(‘Sheet’)
sheet[‘A1’]=“abc”
sheet[‘A1’].font=Font(name=‘Times New Roman’,bold=True,size=24)
公式
wbDataOnly = openpyxl.load_workbook(‘writeFormula.xlsx’, data_only=True)
sheet[‘B9’] = ‘=SUM(B1:B8)’
行高、列宽
sheet.row_dimensions[1].height = 70
sheet.column_dimensions[‘B’].width = 20
合并单元格,合并后的单元格地址为A1
sheet.merge_cells(‘A1:D3’)
拆分单元格
sheet.unmerge_cells(‘A1:D3’)
冻结单元格,那么单元格A2上面和左面的所有单元格都会冻结,A2不会
sheet.freeze_panes = ‘A2’
解冻单元格
sheet.freeze_panes =‘A1’
sheet.freeze_panes =None
图表
创建条形图、折线图、散点图和饼图
import openpyxl, os
os.chdir(“C:\”)
wb = openpyxl.Workbook()
sheet = wb.active
for i in range(1, 11): # Create some data in column A
sheet[‘A’ + str(i)] = i
reference是选择哪个区域的数据做图表
refObj = openpyxl.chart.Reference(sheet, min_row = 1, min_col = 1, max_row = 10, max_col = 1)
seriesObj = openpyxl.chart.Series(refObj, title = ‘First series’)
#Barchart是条形图,openpyxl.charts.LineChart()、 openpyxl.charts.ScatterChart()和 openpyxl.charts.PieChart(),创
建折线图、散点图和饼图
chartObj = openpyxl.chart.BarChart()
图表在excel中的名称
chartObj.title = ‘My Chart’
图表在excel中的位置
chartObj.drawing.top = 50 # set the position
chartObj.drawing.left = 100
chartObj.drawing.width = 300 # set the size
chartObj.drawing.height = 200
chartObj.append(seriesObj)
sheet.add_chart(chartObj, ‘C5’)
wb.save(‘sampleChart.xlsx’)