介绍概念
workbook 工作簿worksheet 工作表row 行 或 column 列cell 单元格 安装工作簿
创建一个空白工作簿打开一个已有工作簿工作簿的属性工作簿的方法【新建、索引、复制、粘贴、移动、删除、关闭】保存工作簿
workbook.`save`(filename) ----- ***保存工作簿 save*** 工作表
从工作簿获取一张工作表对工作表的操作见workbook方法【新建、索引、复制、粘贴、移动、删除、关闭】工作表的属性工作表的方法 单元格
从工作表获取一个单元格单元格的属性单元格的方法
介绍官网: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对象。
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。
[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对象。
Parameters: Relationship=[]
workbook.security
openpyxl.workbook.protection.WorkbookProtection对象。
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对象。
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对象。
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._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)
---
(, , , )
(, , , )
(, , , )
(, , , )
(, , , )
(, , , | )
| | | | | | | | | | | | | | | | | | | | | | | | 【worksheet.columns】
generator。
返回工作表中有数据范围内所有列的生成器。可迭代(遍历)。
for column in worksheet.columns:
print(column)
---
(, , , , , )
(, , , , , )
(, , , , , )
(, , , , , | )
| | | | | | | | | | | | | | | | | | | | | | | |
【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':
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。
(Parameters: count=0, manualBreakCount=0, brk=[] , Parameters: count=0, manualBreakCount=0, brk=[] )
worksheet.col_breaks
openpyxl.worksheet.pagebreak.ColBreak对象。
Parameters: count=0, manualBreakCount=0, brk=[]
worksheet.row_breaks
openpyxl.worksheet.pagebreak.RowBreak对象。
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对象。
Parameters: sheetView= [ 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= [ Parameters: pane=None, activeCell='A1', activeCellId=None, sqref='A1' ] ]
worksheet.sheet_view == worksheet.views.sheetView[0]
openpyxl.worksheet.views.SheetView对象。
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= [ 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对象。
Parameters: codeName=None, enableFormatConditionsCalculation=None, filterMode=None, published=None, syncHorizontal=None, syncRef=None, syncVertical=None, transitionevaluation=None, transitionEntry=None, tabColor=None, outlinePr= Parameters: applyStyles=None, summaryBelow=True, summaryRight=True, showOutlineSymbols=None, pageSetUpPr= 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对象。
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对象。
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对象。
Parameters: differentOddEven=None, differentFirst=None, scaleWithDoc=None, alignWithMargins=None, oddHeader= , oddFooter= , evenHeader= , evenFooter= , firstHeader= , firstFooter=
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对象。
Parameters: disableprompts=None, xWindow=None, yWindow=None, count=0, dataValidation=[]
worksheet.auto_filter
openpyxl.worksheet.filters.AutoFilter对象。
Parameters: ref=None, filterColumn=[], sortState=None
worksheet.print_options
openpyxl.worksheet.page.PrintOptions对象。
Parameters: horizontalCentered=None, verticalCentered=None, headings=None, gridLines=None, gridLinesSet=None
worksheet.protection
openpyxl.worksheet.protection.SheetProtection对象。
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对象。
Parameters: current=None, show=None, sqref=None, scenario=[]
worksheet.sheet_format
openpyxl.worksheet.dimensions.SheetFormatProperties对象。
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) --- [ (| , | , | , | , | ), ( | , | , | , | , | ), ( | , | , | , | , | ), ( | , | , | , | , | ), ( | , | , | , | , | ), ( | , | , | , | , | ), ( | , | , | , | , | ) ] 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) --- [ (| , | , | , | , | , | , | ), ( | , | , | , | , | , | , | ), ( | , | , | , | , | , | , | ), ( | , | , | , | , | , | , | ), ( | , | , | , | , | , | , | ) ] 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对象。
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对象。
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对象。
Parameters: outline=True, diagonalUp=False, diagonalDown=False, start=None, end=None, left= Parameters: style=None, color=None, right= Parameters: style=None, color=None, top= Parameters: style=None, color=None, bottom= Parameters: style=None, color=None, diagonal= Parameters: style=None, color=None, vertical=None, horizontal=None
cell.font
openpyxl.styles.proxy.StyleProxy对象。
Parameters: name='宋体', charset=None, family=2.0, b=False, i=False, strike=None, outline=None, shadow=None, condense=None, color= 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对象。
Parameters: patternType=None, fgColor= Parameters: rgb='00000000', indexed=None, auto=None, theme=None, tint=0.0, type='rgb', bgColor= Parameters: rgb='00000000', indexed=None, auto=None, theme=None, tint=0.0, type='rgb'
cell.protection
openpyxl.styles.proxy.StyleProxy对象。
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



