官网: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}
是 sheet 工作表的一维集合。
是 row 行 或 column 列 的一维集合。一般是指含有数据的单元格围成的工作表范围。
是 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
encoding
= 'utf-8’
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
loaded_theme
= None or bytes(二进制xml文件内容)
template
= False
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]
save
(filename) ----- 保存工作簿 save保存工作簿到指定文件。只写模式下,只能调用一次;只读模式无法调用。
直接获取
workbook._active_sheet_index = index
指定活跃表格的序号
workbook.active
获取工作簿中活跃的一张工作表。
通过名称获取
workbook["sheetname"]
获取指定名称的工作表。
workbook[workbook.sheetnames[index]]
获取指定序列对应名称的工作表
通过索引序号获取
workbook.worksheets[index]
获取指定索引序号的一张工作表。
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
BREAK_NONE
= 0
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
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
= None
worksheet.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
= None
worksheet.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)
]
【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)
【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)
【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)
【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)
【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)
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)
def 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)
def 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