介绍
官网:openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files — openpyxl 3.0.9 documentation
openpyxl是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。
概念
某些概念之间的层级关系和操作类似于字典。
如:
workbook = {“sheetname”: {“cell”: cell}},
worksheet = {“cell”: cell}
workbook 工作簿
是 sheet 工作表的一维集合。
worksheet 工作表
是 row 行 或 column 列 的一维集合。一般是指含有数据的单元格围成的工作表范围。
row 行 或 column 列
是 cell 单元格的一维集合。
cell 单元格
是最小的单位。
安装
pip install openpyxl
工作簿
支持一下语法:
del workbook["sheetname"]
workbook["sheetname"]
for worksheet in workbook: ...
创建一个空白工作簿
from openpyxl import Workbook
workbook = Workbook()
【Workbook(write_only=False, iso_dates=False)】
-
参数
【
write_only
=False】 : bool。工作簿是否只写。若为True,将可在恒定内存消耗下写入无限量数据。iso_dates
=False : bool。不明。 -
返回
创建一个 只写或非只写 空白工作簿。
打开一个已有工作簿
from openpyxl import load_workbook
workbook = load_workbook("./....xlsx")
【load_workbook(filename, read_only=False, keep_vba=KEEP_VBA, data_only=False, keep_links=True)】
-
参数
【
filename
】 : 要打开的文件路径或类文件对象。【
read_only
=False】 : bool。是否只读,不可编辑。keep_vba
=KEEP_VBA : bool。是否保留VBA内容(并不代表能够使用它)。【
data_only
=False】 : bool。控制带有公式的单元格是否具有公式(默认值)或上次Excel读取工作表时存储的值。keep_links
=True : bool。是否应该保留到外部工作簿的链接。默认值为True。 -
返回
打开一个已有工作簿。
工作簿的属性
-
【workbook.
_active_sheet_index
】当前工作簿中活跃的工作表的索引序号。可设置
-
【workbook.
active
】openpyxl.worksheet.worksheet.Worksheet对象。
返回当前工作簿中活跃的一张工作表。(默认是上一次编辑时的工作表,即光标当前所在的工作表。)
-
【workbook.
worksheets
】list。
返回工作簿中所有工作表的列表。
-
【workbook.
sheetnames
】list。
返回工作簿中所有工作表的名称列表。
-
【workbook.
chartsheets
】list。
返回工作簿中所有图表工作表的列表。
-
workbook.
style_names
list。
返回已命名的样式的名称列表。
-
workbook.
name_styles
list。
返回可用的已命名样式的名称列表。
-
【workbook.
write_only
】bool。
返回工作簿是否是只写模式。取决于返回取决于Workbook的write_only参数。
-
【workbook.
read_only
】bool。
返回工作簿是否是只读模式。返回取决于load_workbook的read_only参数。
-
【workbook.
data_only
】bool。
返回工作簿是否是纯数据模式。返回取决于load_workbook的data_only参数。
-
workbook.
iso_dates
bool。
返回取决于Workbook的iso_dates参数。
-
workbook.
is_template
= False
- workbook.
encoding
= 'utf-8’
- workbook.
path
== “/xl/workbook.xml”
-
workbook.
epoch
== workbook.excel_base_date
str。
Windows返回“1899-12-30 00:00:00”;Mac返回“1904-01-01 00:00:00”。
-
workbook.
code_name
= None
- workbook.
loaded_theme
= None or bytes(二进制xml文件内容)
- workbook.
template
= False
- workbook.
vba_archive
= None
-
workbook.
mime_type
str。
mime类型由工作簿是否是模板以及它是否包含宏来决定。Excel需要匹配文件扩展名,但openpyxl不强制这样做。
@property def mime_type(self): """ The mime type is determined by whether a workbook is a template or not and whether it contains macros or not. Excel requires the file extension to match but openpyxl does not enforce this. """ ct = self.template and XLTX or XLSX if self.vba_archive: ct = self.template and XLTM or XLSM return ct SHARED_STRINGS= "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml" EXTERNAL_LINK= "application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml" WORKSHEET_TYPE= "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml" COMMENTS_TYPE= "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml" STYLES_TYPE= "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml" CHARTSHEET_TYPE= "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml" DRAWING_TYPE= "application/vnd.openxmlformats-officedocument.drawing+xml" CHART_TYPE= "application/vnd.openxmlformats-officedocument.drawingml.chart+xml" CHARTSHAPE_TYPE= "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml" THEME_TYPE= "application/vnd.openxmlformats-officedocument.theme+xml" XLTM= "application/vnd.ms-excel.template.macroEnabled.main+xml" XLSM= "application/vnd.ms-excel.sheet.macroEnabled.main+xml" XLTX= "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml" XLSX= "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"
-
workbook.
properties
openpyxl.packaging.core.DocumentProperties对象。
<openpyxl.packaging.core.DocumentProperties object> Parameters: creator='', title=None, description=None, subject=None, identifier=None, language=None, created=datetime.datetime(2022, 3, 23, 11, 13, 51), modified=datetime.datetime(2022, 3, 23, 13, 17, 43), lastModifiedBy='', category=None, contentStatus=None, version=None, revision=None, keywords=ne, lastPrinted=None
-
workbook.
views
list。
[ <openpyxl.workbook.views.BookView object> Parameters: visibility='visible', minimized=False, showHorizontalScroll=True, showVerticalScroll=True, showSheetTabs=True, xWindow=3440, yWindow=2810, windowWidth=14400, windowHeight=7270, tabRatio=600, firstSheet=0, activeTab=1, autoFilterDateGrouping=True]
-
workbook.
rels
openpyxl.packaging.relationship.RelationshipList对象。
<openpyxl.packaging.relationship.RelationshipList object> Parameters: Relationship=[]
-
workbook.
security
openpyxl.workbook.protection.WorkbookProtection对象。
<openpyxl.workbook.protection.WorkbookProtection object> Parameters: workbookPassword=None, workbookPasswordCharacterSet=None, revisionsPassword=None, revisionsPasswordCharacterSet=None, lockStructure=None, lockWindows=None, lockRevision=None, revisionsAlgorithmName=None, revisionsHashValue=None, revisionsSaltValue=None, revisionsSpinCount=None, workbookAlgorithmName=None, workbookHashValue=None, workbookSaltValue=None, workbookSpinCount=None
-
workbook.
calculation
openpyxl.workbook.properties.CalcProperties对象。
<openpyxl.workbook.properties.CalcProperties object> Parameters: calcId=191029, calcMode=None, fullCalcOnLoad=True, refMode=None, iterate=None, iterateCount=None, iterateDelta=None, fullPrecision=None, calcCompleted=None, calcOnSave=None, concurrentCalc=None, concurrentManualCount=None, forceFullCalc=None
-
workbook.
defined_names
openpyxl.workbook.defined_name.DefinedNameList对象。
<openpyxl.workbook.defined_name.DefinedNameList object> Parameters: definedName=[]
-
workbook.
shared_strings
openpyxl.utils.indexed_list.IndexedList对象。
[]
工作簿的方法【新建、索引、复制、粘贴、移动、删除、关闭】
-
【workbook.
create_sheet
(title=None, index=None)】----- 新建工作表 create_sheet在工作簿内创建一个工作表(在一个可选的索引)并返回。只读模式不可用。
-
参数
title
=None : str。工作表的可选标题。index
=None : int。可选的插入工作表的位置。 -
返回
创建的新的openpyxl.worksheet.worksheet.Worksheet对象。
-
-
【workbook.
create_chartsheet
(title=None, index=None)】 ----- 新建建图表工作表 create_chartsheet在指定索引创建一个图标工作表并返回。只读模式无法使用。
-
参数
title=None
: str。工作表名称。index=None
: int。指定索引位置。 -
返回
创建的新的openpyxl.chartsheet.chartsheet.Chartsheet对象。
-
-
【workbook.
index
(worksheet)】 -----索引工作表 index返回指定工作表在工作簿中的索引。
-
参数
worksheet
: openpyxl.worksheet.worksheet.Worksheet对象。要索引的工作表。
-
返回
索引值。
-
-
【workbook.
copy_worksheet
(from_worksheet)】 ----- 复制工作表 copy_worksheet在工作簿内部复制工作表。只读或只写模式无法使用。
-
参数
from_worksheet
: openpyxl.worksheet.worksheet.Worksheet对象。要复制的工作表。
-
返回
复制的工作表的副本。
openpyxl.worksheet.worksheet.Worksheet对象。
-
-
[workbook.
_add_sheet
(worksheet, index=None) ] ----- 粘贴工作表 _add_sheet在工作簿内部指定索引位置增加一个内部工作表。只读模式不可调用。与
copy_worksheet
联用相当于粘贴。-
参数
worksheet
: openpyxl.worksheet.worksheet.Worksheet对象。待粘贴工作表。index
=None : int。指定索引位置。 -
返回
None。
-
-
【workbook.
move_sheet
(sheet, offset=0)】 ----- 移动工作表 move_sheet移动工作簿中指定工作表offset个偏移量。
-
参数
sheet
: str or openpyxl.worksheet.worksheet.Worksheet对象。待移动工作表。offset
: int。偏移量。 -
返回
None。
-
-
【workbook.
remove
(worksheet) ==del workbook["sheetname"]
】 ----- 删除工作表 remove从工作簿删除指定工作表。
-
参数
worksheet
: openpyxl.worksheet.worksheet.Worksheet对象。待移除工作表。 -
返回
None。
-
-
【workbook.
close
()】 ----- 关闭工作簿 close如果工作簿文件打开,则关闭它。只影响只读和只写模式。
-
workbook.
add_named_style
(style)添加一个命名的样式。
-
workbook.
create_named_range
(name, worksheet=None, value=None, scope=None)向workbook.
defined_names
中新建一个openpyxl.workbook.defined_name.DefinedName对象。value因worksheet存在而不同。
def create_named_range(self, name, worksheet=None, value=None, scope=None):
"""Create a new named_range on a worksheet"""
defn = DefinedName(name=name, localSheetId=scope)
if worksheet is not None:
defn.value = "{0}!{1}".format(quote_sheetname(worksheet.title), value)
else:
defn.value = value
self.defined_names.append(defn)
-
workbook.
add_named_range
(named_range)向workbook.
defined_names
列表中添加一个现有的openpyxl.workbook.defined_name.DefinedName对象。
已弃用。改用workbook.defined_names.append(named_range)
-
workbook.
get_named_range
(name)返回名称指定的范围。
已弃用。改用
workbook.defined_names[name]
-
workbook.
get_named_ranges
()返回所有命名范围。
已弃用。改用
workbook.defined_names.definedName
-
workbook.
remove_named_range
(named_range)从工作簿中删除一个named_range。
已弃用。改用
del workbook.defined_names[named_range]
保存工作簿
workbook.save
(filename) ----- 保存工作簿 save
保存工作簿到指定文件。只写模式下,只能调用一次;只读模式无法调用。
工作表
从工作簿获取一张工作表
-
直接获取
workbook._active_sheet_index = index
指定活跃表格的序号workbook.active
获取工作簿中活跃的一张工作表。 -
通过名称获取
workbook["sheetname"]
获取指定名称的工作表。workbook[workbook.sheetnames[index]]
获取指定序列对应名称的工作表 -
通过索引序号获取
workbook.worksheets[index]
获取指定索引序号的一张工作表。
对工作表的操作见workbook方法【新建、索引、复制、粘贴、移动、删除、关闭】
工作表的属性
-
worksheet.
encoding
= “utf-8’”str。
-
worksheet.
path
= “/xl/worksheets/sheetNone.xml”str。
-
【worksheet.
parent
】openpyxl.workbook.workbook.Workbook对象。
返回工作表父对象。
-
worksheet.
legacy_drawing
= None -
【worksheet.
sheet_state
= ‘visible’】str。
工作表的状态,可设置。
worksheet.SHEETSTATE_VISIBLE = 'visible' worksheet.SHEETSTATE_HIDDEN = 'hidden' worksheet.SHEETSTATE_VERYHIDDEN = 'veryHidden'
-
worksheet.
mime_type
= “application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml” -
【worksheet.
title
】str。
返回或设置工作表标题,确保其有效。限制为31个字符,没有特殊字符。重复的标题将按数字递增。如果新建而没有设置过,则返回默认的“Sheet”。
print(worksheet.title) worksheet.title = "Sheet1" print(worksheet.title) --- Sheet Sheet1
-
【worksheet.
dimensions
== worksheet.calculate_dimension
()】str。【“A1:D6”】
返回工作表的含内容的单元格范围。
-
【worksheet.
rows
】generator。
返回工作表中有数据范围内所有行的生成器。可迭代(遍历)。
for row in worksheet.rows: print(row) --- (<Cell 'Sheet10'.A1>, <Cell 'Sheet10'.B1>, <Cell 'Sheet10'.C1>, <Cell 'Sheet10'.D1>) (<Cell 'Sheet10'.A2>, <Cell 'Sheet10'.B2>, <Cell 'Sheet10'.C2>, <Cell 'Sheet10'.D2>) (<Cell 'Sheet10'.A3>, <Cell 'Sheet10'.B3>, <Cell 'Sheet10'.C3>, <Cell 'Sheet10'.D3>) (<Cell 'Sheet10'.A4>, <Cell 'Sheet10'.B4>, <Cell 'Sheet10'.C4>, <Cell 'Sheet10'.D4>) (<Cell 'Sheet10'.A5>, <Cell 'Sheet10'.B5>, <Cell 'Sheet10'.C5>, <Cell 'Sheet10'.D5>) (<Cell 'Sheet10'.A6>, <Cell 'Sheet10'.B6>, <Cell 'Sheet10'.C6>, <Cell 'Sheet10'.D6>)
-
【worksheet.
columns
】generator。
返回工作表中有数据范围内所有列的生成器。可迭代(遍历)。
for column in worksheet.columns:
print(column)
---
(<Cell 'Sheet10'.A1>, <Cell 'Sheet10'.A2>, <Cell 'Sheet10'.A3>, <Cell 'Sheet10'.A4>, <Cell 'Sheet10'.A5>, <Cell 'Sheet10'.A6>)
(<Cell 'Sheet10'.B1>, <Cell 'Sheet10'.B2>, <Cell 'Sheet10'.B3>, <Cell 'Sheet10'.B4>, <Cell 'Sheet10'.B5>, <Cell 'Sheet10'.B6>)
(<Cell 'Sheet10'.C1>, <Cell 'Sheet10'.C2>, <Cell 'Sheet10'.C3>, <Cell 'Sheet10'.C4>, <Cell 'Sheet10'.C5>, <Cell 'Sheet10'.C6>)
(<Cell 'Sheet10'.D1>, <Cell 'Sheet10'.D2>, <Cell 'Sheet10'.D3>, <Cell 'Sheet10'.D4>, <Cell 'Sheet10'.D5>, <Cell 'Sheet10'.D6>)
-
【worksheet.
values
】generator。
返回一个逐行生成工作表中的所有单元格值的生成器。可迭代(遍历)。
for result in worksheet.values: print(result) --- (None, None, None, None) (None, 11111, None, None) (None, None, None, None) (None, None, None, None) (None, None, None, None) (None, None, None, 2222)
-
【worksheet.
max_column
】int。
返回含内容的单元格的最大列序号。【从1开始】
-
【worksheet.
max_row
】int。
返回含内容的单元格的最大行序号。【从1开始】
-
【worksheet.
min_column
】int。
返回含内容的单元格的最小列序号。【从1开始】
-
【worksheet.
min_row
】int。
返回含内容的单元格的最小行序号。【从1开始】
-
【worksheet.
merged_cells
】openpyxl.worksheet.cell_range.MultiCellRange对象。
返回工作表中合并的单元格范围。如返回“A1:D4”。(得先有合并单元格)
-
【worksheet.
tables
】openpyxl.worksheet.table.TableList对象。
返回工作表的所有表格的字典映射。(得先有表格)
{ 'Table1': <openpyxl.worksheet.table.Table object> Parameters: id=1, name='Table1', displayName='Table1', comment=None, ref='A1:E5', tableType=None, headerRowCount=1, insertRow=None, insertRowShift=None, totalsRowCount=None, totalsRowShown=None, published=None, headerRowDxfId=None, dataDxfId=None, totalsRowDxfId=None, headerRowBorderDxfId=None, tableBorderDxfId=None, totalsRowBorderDxfId=None, headerRowCellStyle=None, dataCellStyle=None, totalsRowCellStyle=None, connectionId=None, autoFilter=None, sortState=None, tableColumns=[], tableStyleInfo=None }
-
worksheet.
print_area
None or list。
返回或设置工作表的打印区域,如果没有设置则为None。要设置,提供一个范围比如‘A1:D4’或一个范围列表。
worksheet.print_area = "A1:D6" print(worksheet.print_area) --- ['$A$1:$D$6']
-
worksheet.
print_title_cols
None or str。
返回或设置每页左侧要打印的列,如果没有设置则为None。要设置,提供一个范围比如‘A:D’。
worksheet.print_title_cols = "A:D" print(worksheet.print_title_cols) --- A:D
-
worksheet.
print_title_rows
None or str。
返回或设置每页顶部要打印的行,如果没有设置则为None。要设置,提供一个范围比如‘1:3’。
worksheet.print_title_rows = "1:3" print(worksheet.print_title_rows) --- 1:3
-
worksheet.
print_titles
None or str。
行列中只设置了其中一个,则返回其中之一;否则全部返回,“,”隔开。如果没有设置则为None。
worksheet.print_title_cols = "A:D" worksheet.print_title_rows = "1:3" print(worksheet.print_titles) --- 1:3,A:D
-
worksheet.
BREAK_COLUMN
= 2
- worksheet.
BREAK_NONE
= 0
- worksheet.
BREAK_ROW
= 1
-
worksheet.
page_breaks
tuple。
( <openpyxl.worksheet.pagebreak.RowBreak object> Parameters: count=0, manualBreakCount=0, brk=[] , <openpyxl.worksheet.pagebreak.ColBreak object> Parameters: count=0, manualBreakCount=0, brk=[] )
-
worksheet.
col_breaks
openpyxl.worksheet.pagebreak.ColBreak对象。
<openpyxl.worksheet.pagebreak.ColBreak object> Parameters: count=0, manualBreakCount=0, brk=[]
-
worksheet.
row_breaks
openpyxl.worksheet.pagebreak.RowBreak对象。
<openpyxl.worksheet.pagebreak.RowBreak object> Parameters: count=0, manualBreakCount=0, brk=[]
-
worksheet.
column_dimensions
openpyxl.worksheet.dimensions.DimensionHolder对象。
-
worksheet.
row_dimensions
openpyxl.worksheet.dimensions.DimensionHolder对象。
-
worksheet.
conditional_formatting
openpyxl.formatting.formatting.ConditionalFormattingList对象。
-
worksheet.
formula_attributes
dict。
-
worksheet.
views
openpyxl.worksheet.views.SheetViewList对象。
<openpyxl.worksheet.views.SheetViewList object> Parameters: sheetView= [ <openpyxl.worksheet.views.SheetView object> Parameters: windowProtection=None, showFormulas=None, showGridLines=None, showRowColHeaders=None, showZeros=None, rightToLeft=None, tabSelected=None, showRuler=None, showOutlineSymbols=None, defaultGridColor=None, showWhiteSpace=None, view=None, topLeftCell=None, colorId=None, zoomScale=None, zoomScaleNormal=None, zoomScaleSheetLayoutView=None, zoomScalePageLayoutView=None, zoomToFit=None, workbookViewId=0, pane=None, selection= [ <openpyxl.worksheet.views.Selection object> Parameters: pane=None, activeCell='A1', activeCellId=None, sqref='A1' ] ]
-
worksheet.
sheet_view
== worksheet.views.sheetView[0]
openpyxl.worksheet.views.SheetView对象。
<openpyxl.worksheet.views.SheetView object> Parameters: windowProtection=None, showFormulas=None, showGridLines=None, showRowColHeaders=None, showZeros=None, rightToLeft=None, tabSelected=True, showRuler=None, showOutlineSymbols=None, defaultGridColor=None, showWhiteSpace=None, view=None, topLeftCell=None, colorId=None, zoomScale=None, zoomScaleNormal=None, zoomScaleSheetLayoutView=None, zoomScalePageLayoutView=None, zoomToFit=None, workbookViewId=0, pane=None, selection= [ <openpyxl.worksheet.views.Selection object> Parameters: pane=None, activeCell='D1', activeCellId=None, sqref='D1' ]
-
【worksheet.
active_cell
== worksheet.selected_cell
】worksheet.
sheet_view.selection[0].activeCell
worksheet.
sheet_view.selection[0].sqref
str。【“A1”】
返回工作表中活跃的单元格。即当前光标所在的单元格(默认上次编辑之后停留在的单元格)。
-
worksheet.
show_gridlines
== worksheet.sheet_view.showGridLines
-
worksheet.
freeze_panes
== worksheet.sheet_view.pane.topLeftCell
可设置。
-
worksheet.
sheet_properties
openpyxl.worksheet.properties.WorksheetProperties对象。
<openpyxl.worksheet.properties.WorksheetProperties object> Parameters: codeName=None, enableFormatConditionsCalculation=None, filterMode=None, published=None, syncHorizontal=None, syncRef=None, syncVertical=None, transitionEvaluation=None, transitionEntry=None, tabColor=None, outlinePr= <openpyxl.worksheet.properties.Outline object> Parameters: applyStyles=None, summaryBelow=True, summaryRight=True, showOutlineSymbols=None, pageSetUpPr= <openpyxl.worksheet.properties.PageSetupProperties object> Parameters: autoPageBreaks=None, fitToPage=None
-
worksheet.
show_summary_below
== worksheet.sheet_properties.outlinePr.summaryBelow
- worksheet.
show_summary_right
== worksheet.sheet_properties.outlinePr.summaryRight
-
worksheet.
page_setup
openpyxl.worksheet.page.PrintPageSetup对象。
<openpyxl.worksheet.page.PrintPageSetup object> Parameters: orientation='portrait', paperSize=9, scale=None, fitToHeight=None, fitToWidth=None, firstPageNumber=None, useFirstPageNumber=None, paperHeight=None, paperWidth=None, pageOrder=None, usePrinterDefaults=None, blackAndWhite=None, draft=None, cellComments=None, errors=None, horizontalDpi=None, verticalDpi=None, copies=None, id=None
-
worksheet.
page_margins
openpyxl.worksheet.page.PageMargins对象。
<openpyxl.worksheet.page.PageMargins object> Parameters: left=0.7, right=0.7, top=0.75, bottom=0.75, header=0.3, footer=0.3
-
worksheet.
paper_size
= Noneworksheet.PAPERSIZE_LETTER = '1' worksheet.PAPERSIZE_LETTER_SMALL = '2' worksheet.PAPERSIZE_TABLOID = '3' worksheet.PAPERSIZE_LEDGER = '4' worksheet.PAPERSIZE_LEGAL = '5' worksheet.PAPERSIZE_STATEMENT = '6' worksheet.PAPERSIZE_EXECUTIVE = '7' worksheet.PAPERSIZE_A3 = '8' worksheet.PAPERSIZE_A4 = '9' worksheet.PAPERSIZE_A4_SMALL = '10' worksheet.PAPERSIZE_A5 = '11'
-
worksheet.
orientation
= Noneworksheet.ORIENTATION_LANDSCAPE = 'landscape' worksheet.ORIENTATION_PORTRAIT = 'portrait'
-
worksheet.
HeaderFooter
openpyxl.worksheet.header_footer.HeaderFooter对象。
<openpyxl.worksheet.header_footer.HeaderFooter object> Parameters: differentOddEven=None, differentFirst=None, scaleWithDoc=None, alignWithMargins=None, oddHeader=<openpyxl.worksheet.header_footer.HeaderFooterItem object at 0x00000212235AF0A0>, oddFooter=<openpyxl.worksheet.header_footer.HeaderFooterItem object at 0x00000212235AF370>, evenHeader=<openpyxl.worksheet.header_footer.HeaderFooterItem object at 0x00000212235AD5E0>, evenFooter=<openpyxl.worksheet.header_footer.HeaderFooterItem object at 0x00000212235AFB50>, firstHeader=<openpyxl.worksheet.header_footer.HeaderFooterItem object at 0x00000212235AFA30>, firstFooter=<openpyxl.worksheet.header_footer.HeaderFooterItem object at 0x00000212235AF8E0>
-
worksheet.
oddHeader
== worksheet.HeaderFooter.oddHeader
openpyxl.worksheet.header_footer.HeaderFooterItem对象。可设置。
-
worksheet.
oddFooter
== worksheet.HeaderFooter.oddFooter
openpyxl.worksheet.header_footer.HeaderFooterItem对象。可设置。
-
worksheet.
evenHeader
== worksheet.HeaderFooter.evenHeader
openpyxl.worksheet.header_footer.HeaderFooterItem对象。可设置。
-
worksheet.
evenFooter
== worksheet.HeaderFooter.evenFooter
openpyxl.worksheet.header_footer.HeaderFooterItem对象。可设置。
-
worksheet.
firstHeader
== worksheet.HeaderFooter.firstHeader
openpyxl.worksheet.header_footer.HeaderFooterItem对象。可设置。
-
worksheet.
firstFooter
== worksheet.HeaderFooter.firstFooter
openpyxl.worksheet.header_footer.HeaderFooterItem对象。可设置。
-
worksheet.
data_validations
openpyxl.worksheet.datavalidation.DataValidationList对象。
<openpyxl.worksheet.datavalidation.DataValidationList object> Parameters: disablePrompts=None, xWindow=None, yWindow=None, count=0, dataValidation=[]
-
worksheet.
auto_filter
openpyxl.worksheet.filters.AutoFilter对象。
<openpyxl.worksheet.filters.AutoFilter object> Parameters: ref=None, filterColumn=[], sortState=None
-
worksheet.
print_options
openpyxl.worksheet.page.PrintOptions对象。
<openpyxl.worksheet.page.PrintOptions object> Parameters: horizontalCentered=None, verticalCentered=None, headings=None, gridLines=None, gridLinesSet=None
-
worksheet.
protection
openpyxl.worksheet.protection.SheetProtection对象。
<openpyxl.worksheet.protection.SheetProtection object> Parameters: selectLockedCells=False, selectUnlockedCells=False, algorithmName=None, sheet=False, objects=False, insertRows=True, insertHyperlinks=True, autoFilter=True, scenarios=False, formatColumns=True, deleteColumns=True, insertColumns=True, pivotTables=True, deleteRows=True, formatCells=True, saltValue=None, formatRows=True, sort=True, spinCount=None, password=None, hashValue=None
-
worksheet.
scenarios
openpyxl.worksheet.scenario.ScenarioList对象。
<openpyxl.worksheet.scenario.ScenarioList object> Parameters: current=None, show=None, sqref=None, scenario=[]
-
worksheet.
sheet_format
openpyxl.worksheet.dimensions.SheetFormatProperties对象。
<openpyxl.worksheet.dimensions.SheetFormatProperties object> Parameters: baseColWidth=8, defaultColWidth=None, defaultRowHeight=14.0, customHeight=None, zeroHeight=None, thickTop=None, thickBottom=None, outlineLevelRow=None, outlineLevelCol=None
工作表的方法
-
获取单元格并赋值 — cell()
【worksheet.
cell
(row, column, value=None)】如果给定坐标单元格存在,则返回该单元格对象,否则创建后再返回。并当value不为None时,使该单元格的值为value。
-
参数
row
: int。行号(从1开始)。column
: int。列号(从1开始)。value
=None : 数字、时间、字符串、bool值或者无。 -
返回
openpyxl.cell.cell.Cell对象。
-
-
计算数据容量 — calculate_dimension()
【worksheet.
calculate_dimension
() == worksheet.dimensions
】str。【“A1:D6”】
返回工作表的含数据的单元格范围。
-
追加一行数据 — append()
【worksheet.
append
(iterable)】如果iterable是字典类型,字典的键(可以是数字或字母字符串)将作为值对应的列号。否则,按iterable的顺序进行追加。
-
参数
iterable
: list | tuple | range | generator || dict。 -
返回
None。
-
worksheet.append([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
worksheet.append({1: 4, 2: 2, 3: 3, 4: 7, 5: 9, 6: 6, 7: 5, 8: 8, 9: 10, 10: 1})
worksheet.append({"B": 4, "J": 2, "I": 3, "A": 7, "E": 9, "D": 6, "C": 5, "F": 8, "G": 10, "H": 1})
-
添加图片 — add_image()
【worksheet.
add_image
(img, anchor=None)】锚定单元格插入图片。
-
参数
img
: openpyxl.drawing.image.Image对象。anchor
: str。指定图像左上角所锚定的单元格。 -
返回
None。
-
from openpyxl.drawing.image import Image # 导入模块
img = Image("./test.jpg") # 加载指定路径图像
img.width = 200 # 设置图像宽度
img.height = 100 # 设置图像高度
# img.anchor = "D5" # 指定图像左上角所锚定的单元格
worksheet.add_image(img, anchor="D5")
-
添加图表 — add_chart()
worksheet.
add_chart
(chart, anchor=None)锚定单元格插入图表。
-
参数
chart
: openpyxl.chart的子类对象。anchor
: str。指定图像左上角所锚定的单元格。 -
返回
None。
-
from openpyxl.chart import AreaChart # 导入
chart = AreaChart() # 创建一个某类型空白图表
worksheet.add_chart(chart, anchor="D5")
-
添加表格 — add_table()**
worksheet.
add_table
(table)添加表格。
-
参数
table
: openpyxl.worksheet.table.Table对象。 -
返回
None。
-
from openpyxl.worksheet.table import Table # 导入
# 数据准备
data=[
['Apples', 10000, 5000, 8000, 6000],
['Pears', 2000, 3000, 4000, 5000],
['Bananas', 6000, 6000, 6500, 6000],
['Oranges', 500, 300, 200, 700],
]
worksheet.append(["Fruit", "2011", "2012", "2013", "2014"])
for row in data:
worksheet.append(row)
tab = Table(displayName="Table1", ref="A1:E5") # 添加表格
worksheet.add_table(tab)
-
添加数据验证 — add_data_validation()
worksheet.
add_data_validation
(data_validation)-
参数
data_validation
: openpyxl.worksheet.datavalidation.DataValidation对象。 -
返回
None。
-
from openpyxl.worksheet.datavalidation import DataValidation # 导入
dv = DataValidation(type="list", formula1='"Dog,Cat,Bat"', allow_blank=True)
dv.promptTitle = 'List Selection'
dv.prompt = 'Please select from the list'
dv.errorTitle = 'Invalid Entry'
dv.error = 'Your entry is not in the list'
worksheet.add_data_validation(dv)
c1 = worksheet["A1"]
dv.add(c1)
-
以列为单位获取单元格或单元格的值 — iter_cols()
【worksheet.
iter_cols
(min_col=None, max_col=None, min_row=None, max_row=None, values_only=False)】-
参数
min_col
=None : int or None。指定获取的最小列号。默认为1。(1为基数的索引序号)max_col
=None : int or None。指定获取的最大列号。默认为含数据的最大单元格列号。(1为基数的索引序号)min_row
=None : int or None。指定获取的最小行号。默认为1。(1为基数的索引序号)max_row
=None : int or None。指定获取的最大行号。默认为含数据的最大单元格行号。(1为基数的索引序号)values_only
=False : bool。是否只返回单元格的值。若为True,将只给出单元格的值。 -
返回
generator。
-
result = list(worksheet.iter_cols(min_col=1, max_col=None, min_row=1, max_row=None, values_only=False))
print(result)
---
[
(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.A2>, <Cell 'Sheet1'.A3>, <Cell 'Sheet1'.A4>, <Cell 'Sheet1'.A5>),
(<Cell 'Sheet1'.B1>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.B4>, <Cell 'Sheet1'.B5>),
(<Cell 'Sheet1'.C1>, <Cell 'Sheet1'.C2>, <Cell 'Sheet1'.C3>, <Cell 'Sheet1'.C4>, <Cell 'Sheet1'.C5>),
(<Cell 'Sheet1'.D1>, <Cell 'Sheet1'.D2>, <Cell 'Sheet1'.D3>, <Cell 'Sheet1'.D4>, <Cell 'Sheet1'.D5>),
(<Cell 'Sheet1'.E1>, <Cell 'Sheet1'.E2>, <Cell 'Sheet1'.E3>, <Cell 'Sheet1'.E4>, <Cell 'Sheet1'.E5>),
(<Cell 'Sheet1'.F1>, <Cell 'Sheet1'.F2>, <Cell 'Sheet1'.F3>, <Cell 'Sheet1'.F4>, <Cell 'Sheet1'.F5>),
(<Cell 'Sheet1'.G1>, <Cell 'Sheet1'.G2>, <Cell 'Sheet1'.G3>, <Cell 'Sheet1'.G4>, <Cell 'Sheet1'.G5>)
]
result = list(worksheet.iter_cols(min_col=1, max_col=None, min_row=1, max_row=None, values_only=True))
print(result)
---
[
(None, None, None, None, None),
(None, None, 1, 1, 1),
(None, None, 1, 1, 1),
(None, None, 1, 1, 1),
(None, None, 1, 1, 1),
(None, None, 1, 1, 1),
(None, None, 1, 1, 1)
]
-
以行为单位获取单元格或单元格的值 — iter_rows()
【worksheet.
iter_rows
(min_row=None, max_row=None, min_col=None, max_col=None, values_only=False)】-
参数
min_col
=None : int or None。指定获取的最小列号。默认为1。(1为基数的索引序号)max_col
=None : int or None。指定获取的最大列号。默认为含数据的最大单元格列号。(1为基数的索引序号)min_row
=None : int or None。指定获取的最小行号。默认为1。(1为基数的索引序号)max_row
=None: int or None。指定获取的最大行号。默认为含数据的最大单元格行号。(1为基数的索引序号)values_only
=False : bool。是否只返回单元格的值。若为True,将只给出单元格的值。 -
返回
generator。
-
result = list(worksheet.iter_rows(min_col=1, max_col=None, min_row=1, max_row=None, values_only=False))
print(result)
---
[
(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>, <Cell 'Sheet1'.D1>, <Cell 'Sheet1'.E1>, <Cell 'Sheet1'.F1>, <Cell 'Sheet1'.G1>),
(<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>, <Cell 'Sheet1'.D2>, <Cell 'Sheet1'.E2>, <Cell 'Sheet1'.F2>, <Cell 'Sheet1'.G2>),
(<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>, <Cell 'Sheet1'.D3>, <Cell 'Sheet1'.E3>, <Cell 'Sheet1'.F3>, <Cell 'Sheet1'.G3>),
(<Cell 'Sheet1'.A4>, <Cell 'Sheet1'.B4>, <Cell 'Sheet1'.C4>, <Cell 'Sheet1'.D4>, <Cell 'Sheet1'.E4>, <Cell 'Sheet1'.F4>, <Cell 'Sheet1'.G4>),
(<Cell 'Sheet1'.A5>, <Cell 'Sheet1'.B5>, <Cell 'Sheet1'.C5>, <Cell 'Sheet1'.D5>, <Cell 'Sheet1'.E5>, <Cell 'Sheet1'.F5>, <Cell 'Sheet1'.G5>)
]
result = list(worksheet.iter_rows(min_col=1, max_col=None, min_row=1, max_row=None, values_only=True))
print(result)
---
[
(None, None, None, None, None, None, None),
(None, None, None, None, None, None, None),
(None, 1, 1, 1, 1, 1, 1),
(None, 1, 1, 1, 1, 1, 1),
(None, 1, 1, 1, 1, 1, 1)
]
- 删除列 — delete_cols()
【worksheet.delete_cols
(idx, amount=1)】
从idx列向右删除amount数量的列。(包括idx列,是删除列,不是清空内容)。
-
参数
idx
: int。开始列号。amount
=1 : int。删除数量。 -
返回
None。
worksheet.delete_cols(4, 2)
-
删除行 — delete_rows()
【worksheet.
delete_rows
(idx, amount=1)】从idx行向下删除amount数量的行。(包括idx行,是删除行,不是清空内容)。
-
参数
idx
: int。开始行号。amount
=1 : int。删除数量。 -
返回
None。
worksheet.delete_rows(3, 2)
-
- 左侧插入列 — insert_cols()
【worksheet.insert_cols
(idx, amount=1)】
-
参数
idx
: int。指定列号。amount
: int。插入数量。 -
返回
None。
worksheet.insert_cols(2, 2)
-
上方插入行 — insert_rows()
【worksheet.
insert_rows
(idx, amount=1)】-
参数
idx
: int。指定行号。amount
: int。插入数量。 -
返回
None。
-
worksheet.insert_rows(2, 2)
- 合并单元格 — merge_cells()
【worksheet.merge_cells
(range_string=None, start_row=None, start_column=None, end_row=None, end_column=None)】
-
参数
range_string
=None : str。指定单元格范围的字符串,如"B1:G3"。提供值,则后续参数都被忽略start_row
=None : int。开始行号。start_column
=None : int。开始列号。end_row
=None : int。结束行号。end_column
=None : int。结束列号。 -
返回
None。
worksheet.merge_cells("A1:D4")
# worksheet.merge_cells(start_row=1, start_column=1, end_row=4, end_column=4)
- 解除单元格合并 — unmerge_cells()
【worksheet.unmerge_cells
(range_string=None, start_row=None, start_column=None, end_row=None, end_column=None)】
worksheet.unmerge_cells("A1:D4")
# worksheet.unmerge_cells(str(worksheet.merged_cells))
# worksheet.unmerge_cells(str(worksheet.merged_cells.ranges[0]))
# worksheet.unmerge_cells(start_row=1, start_column=1, end_row=4, end_column=4)
- 移动单元格范围 — move_range()
【worksheet.move_range
(cell_range, rows=0, cols=0, translate=False)】
-
参数
【
cell_range
】 : str or openpyxl.worksheet.cell_range.CellRange对象。要移动的单元格范围,如"B1:G3"。【
rows
=0】 : int。移动行数,>0向下,<0向上。【
cols
=0】 : int。移动列数,>0向右,<0向左。translate
=False : bool。是否转化公式。 -
返回
None。
worksheet.move_range("D1:J7", 2, 2)
- 打印设置 — set_printer_settings()
worksheet.set_printer_settings
(paper_size, orientation)
-
参数
paper_size
: 见worksheet.paper_size。orientation
: 见worksheet.orientation。 -
返回
None。
def set_printer_settings(self, paper_size, orientation):
"""Set printer settings """
self.page_setup.paperSize = paper_size
self.page_setup.orientation = orientation
单元格
从工作表获取一个单元格
worksheet["A1"]
worksheet.cell(row, col)
list(worksheet.rows)[row-1][col-1]
(有数据单元格范围内)
list(worksheet.columns)[col-1][row-1]
(有数据单元格范围内)
单元格的属性
-
【cell.
parent
】openpyxl.worksheet.worksheet.Worksheet对象。
返回单元格父对象。
-
【cell.
encoding
== worksheet.encoding
】str。
返回单元格编码,继承自父对象。
-
【cell.
base_date
== workbook.epoch
】str。
-
【cell.
value
】返回类型取决于单元格内容。
返回或设置单元格的值。
-
【cell.
internal_value
】返回类型取决于单元格内容。
返回单元格的值。不能用来设置。
-
【cell.
coordinate
】str。
返回单元格的坐标,如“A1”。
-
【cell.
column
== cell.col_idx
】int。
返回单元格列号,如 1。
-
【cell.
column_letter
】str。
返回单元格列号对应字母,如“A”。
-
【cell.
row
】int。
返回单元格行号,如 1。
-
【cell.
comment
】openpyxl.comments.Comment对象。
返回与此单元格相关联的注释。
-
【cell.
hyperlink
】openpyxl.worksheet.hyperlink.Hyperlink对象。
<openpyxl.worksheet.hyperlink.Hyperlink object> Parameters: ref='A1', location=None, tooltip=None, display='https://www.baidu.com/', id='rId1'
-
【cell.
data_type
】str。
返回单元格数据的类型。
-
【cell.
is_date
】bool。
返回单元格内容是否为日期。
-
【cell.
has_style
】bool。
返回单元格是否有设置样式。
-
cell.
style
str。
返回单元格样式名称。
-
cell.
style_id
int。
返回单元格样式id。
-
cell.
alignment
openpyxl.styles.proxy.StyleProxy对象。
<openpyxl.styles.alignment.Alignment object> Parameters: horizontal=None, vertical=None, textRotation=0, wrapText=None, shrinkToFit=None, indent=0.0, relativeIndent=0.0, justifyLastLine=None, readingOrder=0.0
-
cell.
border
openpyxl.styles.proxy.StyleProxy对象。
<openpyxl.styles.borders.Border object> Parameters: outline=True, diagonalUp=False, diagonalDown=False, start=None, end=None, left=<openpyxl.styles.borders.Side object> Parameters: style=None, color=None, right=<openpyxl.styles.borders.Side object> Parameters: style=None, color=None, top=<openpyxl.styles.borders.Side object> Parameters: style=None, color=None, bottom=<openpyxl.styles.borders.Side object> Parameters: style=None, color=None, diagonal=<openpyxl.styles.borders.Side object> Parameters: style=None, color=None, vertical=None, horizontal=None
-
cell.
font
openpyxl.styles.proxy.StyleProxy对象。
<openpyxl.styles.fonts.Font object> Parameters: name='宋体', charset=None, family=2.0, b=False, i=False, strike=None, outline=None, shadow=None, condense=None, color=<openpyxl.styles.colors.Color oect> Parameters: rgb=None, indexed=None, auto=None, theme=10, tint=0.0, type='theme', extend=None, sz=11.0, u='single', vertAlign=None, scheme='minor'
-
cell.
fill
openpyxl.styles.proxy.StyleProxy对象。
<openpyxl.styles.fills.PatternFill object> Parameters: patternType=None, fgColor=<openpyxl.styles.colors.Color object> Parameters: rgb='00000000', indexed=None, auto=None, theme=None, tint=0.0, type='rgb', bgColor=<openpyxl.styles.colors.Color object> Parameters: rgb='00000000', indexed=None, auto=None, theme=None, tint=0.0, type='rgb'
-
cell.
protection
openpyxl.styles.proxy.StyleProxy对象。
<openpyxl.styles.protection.Protection object> Parameters: locked=True, hidden=False
-
cell.
pivotButton
bool。
-
cell.
quotePrefix
bool。
单元格的方法
-
【cell.
offset
(row=0, column=0)】获取相对于当前单元格有一定偏移量的单元格。
-
参数
row
=0 : int。行的偏移量。column
=0 : int。列的偏移量。 -
返回
openpyxl.cell.Cell对象。
cell = worksheet.cell(1, 1) cell_offset1 = cell.offset(2, 3) ---(1+2,1+3) cell_offset2 = cell_offset1.offset(-1, -1) -- (1+2-1,1+3-1) print(cell.coordinate, cell_offset1.coordinate, cell_offset1.coordinate) --- A1 D3 C2
-
-
cell.
check_error
(value)文章来源:https://www.toymoban.com/news/detail-444350.htmldef check_error(self, value): """Tries to convert Error" else N/A""" try: return str(value) except UnicodeDecodeError: return u'#N/A'
-
cell.
check_string
(value)文章来源地址https://www.toymoban.com/news/detail-444350.htmldef check_string(self, value): """Check string coding, length, and line break character""" if value is None: return # convert to str string if not isinstance(value, str): value = str(value, self.encoding) value = str(value) # string must never be longer than 32,767 characters # truncate if necessary value = value[:32767] if next(ILLEGAL_CHARACTERS_RE.finditer(value), None): raise IllegalCharacterError return value
到了这里,关于办公自动化 - openpyxl操作Excel(一)基本操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!