装置方法,pipinstallopenpyxl国际镜像装置,pipinstall,ihttps,mirrors.aliyun.com,pypi,simple,openpyxl,介绍,装置更快,中文文档,https,www.osgeo.cn,openpyxl,index.html#usage,examples上班簿、上班表、单元...。
- 装置方法 :
pip install openpyxl
- 国际镜像装置 :
pip install -i https://mirrors.aliyun.com/pypi/simple/ openpyxl
(介绍,装置更快) - 中文文档 :https://www.osgeo.cn/openpyxl/index.html#usage-examples
- 上班簿、上班表、单元格之间的相关 :
- 一个上班簿(workbook)由多个上班表(worksheet)组成;
- 一个上班表有多个单元格(cell)组成;
- 经过行(row)和列(column)可以定位到单元格。
新建并写入文件
- Workbook ():新建excel文件,新建文件时自动有一个名为Sheet上班表
# coding=utf-8from openpyxl import Workbook
wb Workbook # 新建上班簿ws wbactive # 失掉上班表wsappend'姓名' '学号' '年龄' # 追加一行数据wsappend'张三' "1101" 17 # 追加一行数据wsappend'李四' "1102" 18 # 追加一行数据wbsaver'测试1.xlsx' # 保管到指定门路,保管的文件必定不能处于关上形态,由于文件关上后文件只读
关上并读取文件
- load_workbook (path):加载指定门路的excel文件
# coding=utf-8from openpyxl import load_workbook
wb load_workbookr'测试1.xlsx' # 失掉已存在的上班簿ws wbactive # 失掉上班表for row in wsvalues # 输入一切数据printrow
上班簿对象-workbook
- wb. active :失掉第一张上班表对象
- wb[sheet_name] :失掉指定称号的上班表对象
- wb.sheetnames :失掉一切上班表称号
- wb.worksheets:失掉一切上班表对象,wb.worksheets[0]可以依据索引失掉上班表,0代表第一个
- wb. create_sheet (sheet_name,index=“end”):创立并前往一个上班表对象,自动位置最后,0代表第一个
- wb.copy_worksheet(sheet):在以后上班簿复制指定的上班表并前往返制后的上班表对象
- move_sheet( sheet, offset=0):移动上班表,offset代表偏移量,正数向后移,正数向前移
- wb.remove(sheet):删除指定的上班表
- ws.save(path):保管到指定门路path的Excel文件中,若文件不存在会新建,若文件存在会笼罩
# coding=utf-8from openpyxl import load_workbook
wb load_workbookr"测试1.xlsx""""失掉上班表"""active_sheet wbactive # 失掉第一个上班表printactive_sheet # 输入上班表:<Worksheet "Sheet">by_name_sheet wb"Sheet" # 依据上班表称号失掉上班表by_index_sheet wbworksheets0 # 依据上班表索引失掉上班表"""失掉一切上班表"""print"失掉一切"wbsheetnames"""新建上班表"""New_Sheet wbcreate_sheet"New" # 在最后新建上班表First_Sheet wbcreate_sheet"First"index0 # 在扫尾新建上班表print"新建后"wbsheetnames"""复制上班表"""Copy_Sheet wbcopy_worksheetactive_sheet # 复制第一个上班表Copy_Sheettitle "Copy"print"复制后"wbsheetnames"""删除上班表"""wbremoveFirst_Sheet # 依据指定的上班表对象删除上班表wbremoveNew_Sheetprint"删除后"wbsheetnames
wbsaver"测试2.xlsx"
上班表对象-worksheet
- ws.title:失掉或设置上班表名
- ws. max_row :上班表最大行数
- ws.max_column:上班表最大列数
- ws. append (list):表格末尾追加数据
- ws.merged_cells:失掉一切兼并单元格
- ws.merge_cells(‘A2:D2’):兼并单元格
- ws.unmerge_cells(‘A2:D2’):解除兼并单元格。
# coding=utf-8from openpyxl import load_workbook
wb load_workbookr'测试1.xlsx' # 失掉已存在的上班簿ws wbactiveprint"上班表名"wstitle
wstitle "在校生信息表"print"修正后上班表名"wstitleprint"最大行数"wsmax_rowprint"最大列数"wsmax_column
wsappend"王五""1103"17print"最大行数"wsmax_row
wbsaver"测试3.xlsx"
单元格读取
- ws[‘A1’]:依据坐标失掉单个单元格对象
- ws. cell (row, column, value=None):依据行列失掉单个单元格对象,其中cell(1,1)代表A1
- ws[1]:失掉第一行一切单元格对象,ws[“1”]也可
- ws[“A”]:失掉第A列一切单元格对象
- ws[“A”:“B”]:失掉A到B列一切单元格对象,ws[“A:B”]也可
- ws[1:2]:失掉1到2行一切单元格对象,ws[“1:2”]也可
- ws[“A1”:“B2”]:失掉A1到B2范畴一切单元格对象,ws[“A1:B2”]也可。
# coding=utf-8from openpyxl import load_workbook
wb load_workbookr'测试1.xlsx'ws wbactive
A1 ws"A1" # 依据坐标失掉单个单元格print"第一行第一列"wscell11 # 依据行列失掉单个单元格print"第一行"ws1print"第A列"ws"A"print"A到B列"ws"A""B"print"1到2行"ws"1""2"print"A1到B2范畴"ws"A1""B2"
- ws. values :失掉一切单元格数据的可迭代对象,可以经过for循环迭代或经过list(ws.values)转换为数据列表
# coding=utf-8from openpyxl import load_workbook
wb load_workbookr'测试1.xlsx' # 失掉已存在的上班簿ws wbactive # 失掉上班表for row in wsvalues # for循环迭代printrowprintlistwsvalues# 转换为数据列表
- ws. rows :失掉一切数据以行的格局组成的可迭代对象
- ws. columns :失掉一切数据以列的格局组成的可迭代对象
# coding=utf-8from openpyxl import load_workbook
wb load_workbookr'测试1.xlsx'ws wbactivefor row in wsrows # 以行的方式迭代printrowprint55for col in wscolumns # 以列的方式迭代printcol
- ws. iter_rows (min_row=None, max_row=None, min_col=None, max_col=None):失掉指定边界范畴并以行的格局组成的可迭代对象,自动一切行
- ws. iter_cols (min_col=None, max_col=None, min_row=None, max_row=None): 失掉指定边界范畴并以列的格局组成的可迭代对象,自动一切列
# coding=utf-8from openpyxl import load_workbook
wb load_workbookr'测试1.xlsx'ws wbactivefor row in wsiter_rowsmax_row2max_col2 # 指定边界范畴并以行的方式可迭代printrowprint35for column in wsiter_colsmax_row2max_col2 # 指定边界范畴并以行的方式可迭代printcolumn
单元格对象 - cell
- cell.value :失掉或设置值
- cell.column : 数字列标
- cell.column_letter : 字母列标
- cell.row : 行号
- cell.coordinate : 坐标,例如’A1’
- cell.data_type : 数据类型, ’s‘ = string字符串,‘n’ = number数值,会依据单元格值智能判别
- cell.number_format :单元格格局,自动”General“惯例,详见excel自定义数据类型
- cell.hyperlink:失掉或设置单元格超链接(可以是网址或许本地文件门路)
# coding=utf-8from openpyxl import Workbook
wb Workbook # 新建上班簿ws wbactive"""失掉与设置单元格值的两种方式"""cell1 wscell1 1 # 先失掉第一行第一列的单元格对象cell1value 18 # 再设置单元格对象的值print"值" cell1valueprint"数字列标" cell1columnprint"字母列标" cell1column_letterprint"行号" cell1rowprint"坐标" cell1coordinate
cell2 wscell2 1 17 # 间接在失掉单元格的时刻设置值"""经常使用公式和不实用公式"""cell3 wscell3 1 "=A1+A2" # 间接输入公式具备计算性能cell4 wscell4 1 "=A1+A2"cell4data_type 's' # 指定单元格数据类型为文本可以防止公式被计算"""设置格局和不设置格局"""cell5 wscell5 1 3.1415 # 自动惯例格局cell6 wscell6 1 3.1415cell6number_format "0.00" # 设置格局为保管两位小数"""超链接"""cell7 wscell7 1 "百度翻译"cell7hyperlink "https://fanyi.baidu.com/" # 设置超链接# cell7.hyperlink = r"C:UsersadminDesktop测试.xlsx" # 关上本地文件# print(cell7.hyperlink.target) # 失掉超链接地址cell7font Fontcolor"0000FF" underline'single' # 字体色彩为蓝色+下划线wbsaver'测试4.xlsx' # 保管到指定门路
单元格样式
- cell.font :失掉或设置单元格Font对象
- cell.border : 失掉或设置单元格边框
- cell.alignment : 失掉或设置单元格水平、垂直对齐方式、智能换行等
- cell.fill:失掉或设置单元格填充色彩
from openpyxl import Workbookfrom openpyxlstyles import Font Border Side AlignmentPatternFillfrom copy import copy
wb Workbook
ws wbactive"""失掉单元格并设置单元格值为 姓名 """cell wscell11"姓名""""设置单元格文字样式"""cellfont FontboldTrue # 加粗italicTrue # 歪斜name"楷体" # 字体size13 # 文字大小color"FF0000" # 字体色彩为白色underline'single' # 下划线"""复制单元格样式"""cell2 wscell12"学号"cell2font copycellfont"""设置单元格边框为彩色边框"""cellborder BorderbottomSidestyle'thin' color'000000'rightSidestyle'thin' color'000000'leftSidestyle'thin' color'000000'topSidestyle'thin' color'000000'"""设置单元格对齐方式为水平居中和垂直居中,单元格内容超出范畴智能换行"""cellalignment Alignmenthorizontal'center'vertical'center'wrap_textTrue"""设置单元格底纹色彩为黄色"""cellfill PatternFillfill_type'solid' start_color'FFFF00'"""白色:FFFFFF,彩色:000000,白色:FF0000,黄色:FFFF00绿色:00FF00,蓝色:0000FF,橙色:FF9900,灰色:C0C0C0经常出现色彩代码表:https://www.osgeo.cn/openpyxl/styles.html#indexed-colours
"""wbsaver"测试5.xlsx"
列宽与行高
- ws.row_dimensions[行号]:失掉行对象(非行数据,包括行的相关属性、行初等)
- ws.column_dimensions[字母列标]:失掉列对象(非行数据,包括行的相关属性、列宽等)
- get_column_letter(index):依据列的索引前往字母
- column_index_from_string(string):依据字母前往列的索引
- row.height:失掉或设置行高
- column.width:失掉或设置列宽
from openpyxl import Workbookfrom openpyxlutils import get_column_lettercolumn_index_from_string
wb Workbook
ws wbactive"""行"""row wsrow_dimensions1 # 失掉第一行行对象print"行号"rowindex
rowheight 20 # 设置行高print"行高"rowheight"""列"""column wscolumn_dimensions"A" # 依据字母列标失掉第一列列对象column wscolumn_dimensionsget_column_letter1 # 依据数字列标失掉第一列列对象print"字母列标"columnindexprint"数字列标"column_index_from_stringcolumnindex
columnwidth 15 # 设置列宽print"列宽"columnwidth
wbsaver'测试6.xlsx'
如何依据输入内容计算其在excel的列宽是多少?
- 应用GBK编码方式,非汉字字符占1个长度,汉字字符占2个长度
from openpyxl import Workbookfrom openpyxlutils import get_column_lettercolumn_index_from_string
wb Workbook
ws wbactive
column wscolumn_dimensionsget_column_letter1 # 依据数字列标失掉第一列列对象value "我爱中国ILoveChain"# 4*2+10*1+1=19columnwidth lenstrvalueencode"GBK"1 # 依据内容设置列宽,+1既可以补充误差又可以让两头留有必定的空白,好看print"列宽"columnwidth # 输入:19wscell11value
wbsaver'测试6.xlsx'
拔出和删除行和列
- ws.insert_rows(row_index,amount=1):在第row_index行上方拔出amount列,自动拔出1列
- ws.insert_cols(col_index,amount=1):在第col_index列左侧拔出amount列,自动拔出1列
- ws.delete_rows(row_index,amount=1):从row_index行开局向下删除amount行,自动删除1行
- ws.delete_cols(col_index,amount=1):从col_index列开局向右删除amount行,自动删除1列
from openpyxl import Workbookload_workbook
wb load_workbook"测试1.xlsx"ws wbactive
wsinsert_rows12 # 在第一行前拔出两行delete_col_index 13 # 删除1、3两列"""为防止删除多列时前面列对前面列发生影响,采取从前面列往前面列删的战略,行同理"""delete_col_indexsortreverseTrue # 从大到小排序for col_index in delete_col_indexwsdelete_colscol_index
wbsaver'测试7.xlsx'
拔出和失掉图片
拔出图片
- ws. add_img (img,“坐标”):减少图片到指定单元格位置
from openpyxl import Workbookfrom openpyxldrawingimage import Image
wb Workbook
ws wbactive
img Image'logo.png' # 关上图片imgwidthimgheight 8080 # 设置图片宽、高wsadd_imageimg 'A1'wbsave'logo.xlsx'
失掉图片
- ws. _images :失掉以后上班表的图片列表
from openpyxl import load_workbookfrom PIL import Image as PILImage
wb load_workbookr'logo.xlsx'ws wbactivefor img in ws_images img PILImageopenimgref # 失掉图片对象imgsaver'logo.{}'formatimgformat # 保管图片到指定位置"""失掉多张图片"""for indeximg in enumeratews_imagesimg PILImageopenimgref # 失掉图片对象imgsaver'图片{}.{}'formatindex1imgformat # 保管图片到指定位置
综合写入通常
写入后的成果如下:
# coding=utf-8from openpyxl import Workbookfrom openpyxlstyles import Font Border Side Alignment PatternFill
wb Workbook
ws wbactive"""设置全局样式"""border BorderbottomSidestyle'thin' color'000000'rightSidestyle'thin' color'000000'leftSidestyle'thin' color'000000'topSidestyle'thin' color'000000'alignment Alignmenthorizontal'center' vertical'center'row_index 1 # 写入的行索引,每写入一行后+1"""写入题目"""title '姓名' '学号' '分数'for indexitem in enumeratetitlecell wscellrow_indexindex1itemcellborder bordercellalignment alignmentcellfont FontboldTruerow_index 1>= '张三' "1101" 17'李四' "3412" 18'王五' "1103" 16"""写入注释"""for row in>:for indexitem in enumeraterowcell wscellrow_index index 1 itemcellborder bordercellalignment alignmentrow_index 1"""写入结果"""result "算计" 171816for indexitem in enumerateresultcell wscellrow_indexindex1itemcellborder bordercellalignment alignmentcellfill PatternFillfill_type'solid' start_color"FFFF00"wbsaver"在校生信息表.xlsx"
兼并表格
# coding=utf-8from openpyxl import Workbookload_workbookimport os
dir_path "在校生名单" # 要兼并文件的文件夹地址"""读取文件夹下的一切excel文件"""files
for file in oslistdirdir_path # 失掉以后目录下的一切文件filesappendospathjoindir_pathfile # 失掉文件夹+文件名的完整门路"""以第一个文件为基本表"""merge_excel load_workbookfiles0merge_sheet merge_excelactive"""遍历残余文件,追加到基本表"""for file in files1wb load_workbookfilews wbactivefor row in listwsvalues1 # 从第二行开局读取每一行并追加到基本表merge_sheetappendrow
merge_excelsave"高一在校生汇总.xlsx"
拆分表格
# coding=utf-8from openpyxl import Workbookload_workbookimport os
file_path "高一在校生汇总.xlsx" # 要拆分的文件地址split_dir "拆分结果" # 拆分文件后保管的文件夹group_item "班级" # 拆分的依据字段"""关上拆分的excel文件并读取题目"""wb load_workbookfile_path
ws wbactive
title
for cell in ws1titleappendcellvalue"""开局分组,分组结果保管到字典,键为班级名,值为班级在校生列表"""group_result # 存储分组结果group_index titleindexgroup_item # 失掉拆分依据字段的索引for row in listwsvalues1class_name rowgroup_index # 失掉分组依据数据,即班级名if class_name in group_result # 假设分组存在就追加,不存在就新建group_resultclass_nameappendrowelsegroup_resultclass_name row"""创立输入文件夹"""if not ospathexistssplit_dir # 假设不存在文件夹就新建osmkdirsplit_dir
oschdirsplit_dir # 进入拆分文件夹"""打印并输入分组后的数据"""for class_namestudents in group_resultitemsnew_wb Workbook # 新建excelnew_ws new_wbactivenew_wsappendtitle # 追加题目for student in studentsnew_wsappendstudent # 讲分组数组追加到新excel中new_wbsave"{}.xlsx"formatclass_name
作业提交状况检测
# encoding: utf-8import osfrom openpyxl import Workbook load_workbook
excel_path r"在校生名单/高一1班.xlsx" # excel文件门路job_path r"作业" # 作业文件夹门路"""失掉姓名列表"""wb load_workbookexcel_path
ws wbactive
names
for cell in ws"C"1# 失掉第C列第2行开局的数据namesappendcellvalue"""失掉作业列表"""oschdirjob_path # 切换到作业目录files # 失掉文件列表for file in oslistdirfilesappendospathsplitextfile0"""作业检测"""yesno
for name in names # 一一姓名判别if name in files # 判别姓名能否在文件列表中yesappendname # 假设在,减少到已成功名单elsenoappendname # 否则,减少到未成功名单print"已成功人数:{},已成功名单:{}"formatlenyesyesprint"未成功人数:{},未成功名单:{}"formatlennono
版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。客服邮箱:kefu@itcaiji.cn
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!