办公自动化 - openpyxl操作Excel(一)基本操作

介绍

官网: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库。


概念

202203231918344

某些概念之间的层级关系和操作类似于字典

如:

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)

  1. 参数

    write_only=False】 : bool。工作簿是否只写。若为True,将可在恒定内存消耗下写入无限量数据。

    iso_dates=False : bool。不明。

  2. 返回

    创建一个 只写或非只写 空白工作簿。

打开一个已有工作簿

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)

  1. 参数

    filename】 : 要打开的文件路径或类文件对象。

    read_only=False】 : bool。是否只读,不可编辑。

    keep_vba=KEEP_VBA : bool。是否保留VBA内容(并不代表能够使用它)。

    data_only=False】 : bool。控制带有公式的单元格是否具有公式(默认值)或上次Excel读取工作表时存储的值。

    keep_links=True : bool。是否应该保留到外部工作簿的链接。默认值为True。

  2. 返回

    打开一个已有工作簿。

工作簿的属性

  1. 【workbook._active_sheet_index

    当前工作簿中活跃的工作表的索引序号。可设置

  2. 【workbook.active

    openpyxl.worksheet.worksheet.Worksheet对象。

    返回当前工作簿中活跃的一张工作表。(默认是上一次编辑时的工作表,即光标当前所在的工作表。)

  3. 【workbook.worksheets

    list。

    返回工作簿中所有工作表的列表。

  4. 【workbook.sheetnames

    list。

    返回工作簿中所有工作表的名称列表。

  5. 【workbook.chartsheets

    list。

    返回工作簿中所有图表工作表的列表。

  6. workbook.style_names

    list。

    返回已命名的样式的名称列表。

  7. workbook.name_styles

    list。

    返回可用的已命名样式的名称列表。

  8. 【workbook.write_only

    bool。

    返回工作簿是否是只写模式。取决于返回取决于Workbook的write_only参数。

  9. 【workbook.read_only

    bool。

    返回工作簿是否是只读模式。返回取决于load_workbook的read_only参数。

  10. 【workbook.data_only

    bool。

    返回工作簿是否是纯数据模式。返回取决于load_workbook的data_only参数。

  11. workbook.iso_dates

    bool。

    返回取决于Workbook的iso_dates参数。

  12. workbook.is_template = False

  1. workbook.encoding = 'utf-8’

  1. workbook.path == “/xl/workbook.xml”

  1. workbook.epoch == workbook.excel_base_date

    str。

    Windows返回“1899-12-30 00:00:00”;Mac返回“1904-01-01 00:00:00”。

  2. workbook.code_name = None

  1. workbook.loaded_theme = None or bytes(二进制xml文件内容)

  1. workbook.template = False

  1. workbook.vba_archive = None

  1. 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" 
    
    
  2. 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
    
  3. 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]
    
  4. workbook.rels

    openpyxl.packaging.relationship.RelationshipList对象。

    <openpyxl.packaging.relationship.RelationshipList object>
    Parameters:
    	Relationship=[]
    
  5. 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
    
  6. 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
    
  7. workbook.defined_names

    openpyxl.workbook.defined_name.DefinedNameList对象。

    <openpyxl.workbook.defined_name.DefinedNameList object>
    Parameters:
    	definedName=[]
    
  8. workbook.shared_strings

    openpyxl.utils.indexed_list.IndexedList对象。

    []
    

工作簿的方法【新建、索引、复制、粘贴、移动、删除、关闭】

  1. 【workbook.create_sheet(title=None, index=None)】----- 新建工作表 create_sheet

    在工作簿内创建一个工作表(在一个可选的索引)并返回。只读模式不可用。

    • 参数

      title=None : str。工作表的可选标题。

      index=None : int。可选的插入工作表的位置。

    • 返回

      创建的新的openpyxl.worksheet.worksheet.Worksheet对象。

  2. 【workbook.create_chartsheet(title=None, index=None)】 ----- 新建建图表工作表 create_chartsheet

    在指定索引创建一个图标工作表并返回。只读模式无法使用。

    • 参数

      title=None : str。工作表名称。

      index=None : int。指定索引位置。

    • 返回

      创建的新的openpyxl.chartsheet.chartsheet.Chartsheet对象。

  3. 【workbook.index(worksheet)】 -----索引工作表 index

    返回指定工作表在工作簿中的索引。

    • 参数

      worksheet : openpyxl.worksheet.worksheet.Worksheet对象。

      要索引的工作表。

    • 返回

      索引值。

  4. 【workbook.copy_worksheet(from_worksheet)】 ----- 复制工作表 copy_worksheet

    在工作簿内部复制工作表。只读或只写模式无法使用。

    • 参数

      from_worksheet : openpyxl.worksheet.worksheet.Worksheet对象。

      要复制的工作表。

    • 返回

      复制的工作表的副本。

      openpyxl.worksheet.worksheet.Worksheet对象。

  5. [workbook._add_sheet(worksheet, index=None) ] ----- 粘贴工作表 _add_sheet

    在工作簿内部指定索引位置增加一个内部工作表。只读模式不可调用。与copy_worksheet联用相当于粘贴。

    • 参数

      worksheet : openpyxl.worksheet.worksheet.Worksheet对象。待粘贴工作表。

      index=None : int。指定索引位置。

    • 返回

      None。

  6. 【workbook.move_sheet(sheet, offset=0)】 ----- 移动工作表 move_sheet

    移动工作簿中指定工作表offset个偏移量。

    • 参数

      sheet : str or openpyxl.worksheet.worksheet.Worksheet对象。待移动工作表。

      offset : int。偏移量。

    • 返回

      None。

  7. 【workbook.remove(worksheet) == del workbook["sheetname"]】 ----- 删除工作表 remove

    从工作簿删除指定工作表。

    • 参数

      worksheet : openpyxl.worksheet.worksheet.Worksheet对象。待移除工作表。

    • 返回

      None。

  8. 【workbook.close()】 ----- 关闭工作簿 close

    如果工作簿文件打开,则关闭它。只影响只读和只写模式。

  9. workbook.add_named_style(style)

    添加一个命名的样式。

  10. 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)
  1. workbook.add_named_range(named_range)

    向workbook.defined_names列表中添加一个现有的openpyxl.workbook.defined_name.DefinedName对象。
    已弃用。改用workbook.defined_names.append(named_range)

  2. workbook.get_named_range(name)

    返回名称指定的范围。

    已弃用。改用workbook.defined_names[name]

  3. workbook.get_named_ranges()

    返回所有命名范围。

    已弃用。改用workbook.defined_names.definedName

  4. workbook.remove_named_range(named_range)

    从工作簿中删除一个named_range。

    已弃用。改用del workbook.defined_names[named_range]

保存工作簿

workbook.save(filename) ----- 保存工作簿 save

保存工作簿到指定文件。只写模式下,只能调用一次;只读模式无法调用。


工作表

从工作簿获取一张工作表

  1. 直接获取

    workbook._active_sheet_index = index 指定活跃表格的序号

    workbook.active 获取工作簿中活跃的一张工作表。

  2. 通过名称获取

    workbook["sheetname"] 获取指定名称的工作表。

    workbook[workbook.sheetnames[index]] 获取指定序列对应名称的工作表

  3. 通过索引序号获取

    workbook.worksheets[index] 获取指定索引序号的一张工作表。

对工作表的操作见workbook方法【新建、索引、复制、粘贴、移动、删除、关闭】

工作表的属性

  1. worksheet.encoding = “utf-8’”

    str。

  2. worksheet.path = “/xl/worksheets/sheetNone.xml”

    str。

  3. 【worksheet.parent

    openpyxl.workbook.workbook.Workbook对象。

    返回工作表父对象。

  4. worksheet.legacy_drawing = None

  5. 【worksheet.sheet_state = ‘visible’】

    str。

    工作表的状态,可设置。

    worksheet.SHEETSTATE_VISIBLE = 'visible'
    worksheet.SHEETSTATE_HIDDEN = 'hidden'
    worksheet.SHEETSTATE_VERYHIDDEN = 'veryHidden'
    
  6. worksheet.mime_type = “application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml”

  7. 【worksheet.title

    str。

    返回或设置工作表标题,确保其有效。限制为31个字符,没有特殊字符。重复的标题将按数字递增。如果新建而没有设置过,则返回默认的“Sheet”。

    print(worksheet.title)
    
    worksheet.title = "Sheet1"
    print(worksheet.title)
    
    ---
    Sheet
    Sheet1
    
  8. 【worksheet.dimensions == worksheet.calculate_dimension()】

    str。【“A1:D6”】

    返回工作表的含内容的单元格范围。

  9. 【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>)
    
  10. 【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>)

  1. 【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)
    
  2. 【worksheet.max_column

    int。

    返回含内容的单元格的最大列序号。【从1开始】

  3. 【worksheet.max_row

    int。

    返回含内容的单元格的最大行序号。【从1开始】

  4. 【worksheet.min_column

    int。

    返回含内容的单元格的最小列序号。【从1开始】

  5. 【worksheet.min_row

    int。

    返回含内容的单元格的最小行序号。【从1开始】

  6. 【worksheet.merged_cells

    openpyxl.worksheet.cell_range.MultiCellRange对象。

    返回工作表中合并的单元格范围。如返回“A1:D4”。(得先有合并单元格)

  7. 【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
    }
    
  8. worksheet.print_area

    None or list。

    返回或设置工作表的打印区域,如果没有设置则为None。要设置,提供一个范围比如‘A1:D4’或一个范围列表。

    worksheet.print_area = "A1:D6"
    print(worksheet.print_area)
    
    ---
    ['$A$1:$D$6']
    
  9. worksheet.print_title_cols

    None or str。

    返回或设置每页左侧要打印的列,如果没有设置则为None。要设置,提供一个范围比如‘A:D’。

    worksheet.print_title_cols = "A:D"
    print(worksheet.print_title_cols)
    
    ---
    A:D
    
  10. worksheet.print_title_rows

    None or str。

    返回或设置每页顶部要打印的行,如果没有设置则为None。要设置,提供一个范围比如‘1:3’。

    worksheet.print_title_rows = "1:3"
    print(worksheet.print_title_rows)
    
    ---
    1:3
    
  11. 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
    
  12. worksheet.BREAK_COLUMN = 2

  1. worksheet.BREAK_NONE = 0

  1. worksheet.BREAK_ROW = 1

  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=[]
    )
    
  2. worksheet.col_breaks

    openpyxl.worksheet.pagebreak.ColBreak对象。

    <openpyxl.worksheet.pagebreak.ColBreak object>
    Parameters:
    	count=0, 
    	manualBreakCount=0, 
    	brk=[]
    
  3. worksheet.row_breaks

    openpyxl.worksheet.pagebreak.RowBreak对象。

    <openpyxl.worksheet.pagebreak.RowBreak object>
    Parameters:
    	count=0, 
    	manualBreakCount=0, 
    	brk=[]
    
  4. worksheet.column_dimensions

    openpyxl.worksheet.dimensions.DimensionHolder对象。

  5. worksheet.row_dimensions

    openpyxl.worksheet.dimensions.DimensionHolder对象。

  6. worksheet.conditional_formatting

    openpyxl.formatting.formatting.ConditionalFormattingList对象。

  7. worksheet.formula_attributes

    dict。

  8. 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'
        		]
    ]
    
  9. 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'
    		]
    
  10. 【worksheet.active_cell == worksheet.selected_cell

    worksheet.sheet_view.selection[0].activeCell

    worksheet.sheet_view.selection[0].sqref

    str。【“A1”】

    返回工作表中活跃的单元格。即当前光标所在的单元格(默认上次编辑之后停留在的单元格)。

  11. worksheet.show_gridlines == worksheet.sheet_view.showGridLines

  1. worksheet.freeze_panes == worksheet.sheet_view.pane.topLeftCell

    可设置。

  2. 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
    
  3. worksheet.show_summary_below == worksheet.sheet_properties.outlinePr.summaryBelow

  1. worksheet.show_summary_right == worksheet.sheet_properties.outlinePr.summaryRight

  1. 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
    
  2. 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
    
  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'
    
  4. worksheet.orientation = None

    worksheet.ORIENTATION_LANDSCAPE = 'landscape'
    worksheet.ORIENTATION_PORTRAIT = 'portrait'
    
  5. 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>
    
  6. worksheet.oddHeader == worksheet.HeaderFooter.oddHeader

    openpyxl.worksheet.header_footer.HeaderFooterItem对象。可设置。

  7. worksheet.oddFooter == worksheet.HeaderFooter.oddFooter

    openpyxl.worksheet.header_footer.HeaderFooterItem对象。可设置。

  8. worksheet.evenHeader == worksheet.HeaderFooter.evenHeader

    openpyxl.worksheet.header_footer.HeaderFooterItem对象。可设置。

  9. worksheet.evenFooter == worksheet.HeaderFooter.evenFooter

    openpyxl.worksheet.header_footer.HeaderFooterItem对象。可设置。

  10. worksheet.firstHeader == worksheet.HeaderFooter.firstHeader

    openpyxl.worksheet.header_footer.HeaderFooterItem对象。可设置。

  11. worksheet.firstFooter == worksheet.HeaderFooter.firstFooter

    openpyxl.worksheet.header_footer.HeaderFooterItem对象。可设置。

  12. worksheet.data_validations

    openpyxl.worksheet.datavalidation.DataValidationList对象。

    <openpyxl.worksheet.datavalidation.DataValidationList object>
    Parameters:
    	disablePrompts=None, 
    	xWindow=None, 
    	yWindow=None, 
    	count=0, 
    	dataValidation=[]
    
  13. worksheet.auto_filter

    openpyxl.worksheet.filters.AutoFilter对象。

    <openpyxl.worksheet.filters.AutoFilter object>
    Parameters:
    	ref=None, 
    	filterColumn=[], 
    	sortState=None
    
  14. worksheet.print_options

    openpyxl.worksheet.page.PrintOptions对象。

    <openpyxl.worksheet.page.PrintOptions object>
    Parameters:
    	horizontalCentered=None, 
    	verticalCentered=None, 
    	headings=None, 
    	gridLines=None, 
    	gridLinesSet=None
    
  15. 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
    
  16. worksheet.scenarios

    openpyxl.worksheet.scenario.ScenarioList对象。

    <openpyxl.worksheet.scenario.ScenarioList object>
    Parameters:
    	current=None, 
    	show=None, 
    	sqref=None, 
    	scenario=[]
    
  17. 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
    

工作表的方法

  1. 获取单元格并赋值 — cell()

    【worksheet.cell(row, column, value=None)】

    如果给定坐标单元格存在,则返回该单元格对象,否则创建后再返回。并当value不为None时,使该单元格的值为value。

    • 参数

      row : int。行号(从1开始)。

      column : int。列号(从1开始)。

      value=None : 数字、时间、字符串、bool值或者无。

    • 返回

      openpyxl.cell.cell.Cell对象。

  2. 计算数据容量 — calculate_dimension()

    【worksheet.calculate_dimension() == worksheet.dimensions

    str。【“A1:D6”】

    返回工作表的含数据的单元格范围。

  3. 追加一行数据 — 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])

image-20220326020135154

worksheet.append({1: 4, 2: 2, 3: 3, 4: 7, 5: 9, 6: 6, 7: 5, 8: 8, 9: 10, 10: 1})

image-20220326020454695

worksheet.append({"B": 4, "J": 2, "I": 3, "A": 7, "E": 9, "D": 6, "C": 5, "F": 8, "G": 10, "H": 1})

image-20220326020748067

  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")

image-20220326033049806

  1. 添加图表 — 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")

image-20220326032944260

  1. 添加表格 — 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)

image-20220326034850674

  1. 添加数据验证 — 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)

image-20220326041245086

image-20220326041218601

image-20220326041508770

  1. 以列为单位获取单元格或单元格的值 — 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。

image-20220326135503644

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)
]
  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。

image-20220326141205175

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)
]
  1. 删除列 — delete_cols()

【worksheet.delete_cols(idx, amount=1)】

从idx列向右删除amount数量的列。(包括idx列,是删除列,不是清空内容)。

  • 参数

    idx : int。开始列号。

    amount=1 : int。删除数量。

  • 返回

    None。

worksheet.delete_cols(4, 2)

image-20220326144215748

image-20220326143811439

  1. 删除行 — delete_rows()

    【worksheet.delete_rows(idx, amount=1)】

    从idx行向下删除amount数量的行。(包括idx行,是删除行,不是清空内容)。

    • 参数

      idx : int。开始行号。

      amount=1 : int。删除数量。

    • 返回

      None。

    worksheet.delete_rows(3, 2)
    

image-20220326144532153

image-20220326144741007

  1. 左侧插入列 — insert_cols()

【worksheet.insert_cols(idx, amount=1)】

  • 参数

    idx : int。指定列号。

    amount : int。插入数量。

  • 返回

    None。

worksheet.insert_cols(2, 2)

image-20220326150638428

  1. 上方插入行 — insert_rows()

    【worksheet.insert_rows(idx, amount=1)】

    • 参数

      idx : int。指定行号。

      amount : int。插入数量。

    • 返回

      None。

worksheet.insert_rows(2, 2)

image-20220326151229013

  1. 合并单元格 — 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)

image-20220326153445098

  1. 解除单元格合并 — 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)

1111

  1. 移动单元格范围 — 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)

image-20220326152115182

  1. 打印设置 — 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](有数据单元格范围内)

单元格的属性

  1. 【cell.parent

    openpyxl.worksheet.worksheet.Worksheet对象。

    返回单元格父对象。

  2. 【cell.encoding == worksheet.encoding

    str。

    返回单元格编码,继承自父对象。

  3. 【cell.base_date == workbook.epoch

    str。

  4. 【cell.value

    返回类型取决于单元格内容。

    返回或设置单元格的值。

  5. 【cell.internal_value

    返回类型取决于单元格内容。

    返回单元格的值。不能用来设置。

  6. 【cell.coordinate

    str。

    返回单元格的坐标,如“A1”。

  7. 【cell.column == cell.col_idx

    int。

    返回单元格列号,如 1。

  8. 【cell.column_letter

    str。

    返回单元格列号对应字母,如“A”。

  9. 【cell.row

    int。

    返回单元格行号,如 1。

  10. 【cell.comment

    openpyxl.comments.Comment对象。

    返回与此单元格相关联的注释。

  11. 【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'
    
  12. 【cell.data_type

    str。

    返回单元格数据的类型。

  13. 【cell.is_date

    bool。

    返回单元格内容是否为日期。

  14. 【cell.has_style

    bool。

    返回单元格是否有设置样式。

  15. cell.style

    str。

    返回单元格样式名称。

  16. cell.style_id

    int。

    返回单元格样式id。

  17. 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
    
  18. 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
    
  19. 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'
    
  20. 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'
    
  21. cell.protection

    openpyxl.styles.proxy.StyleProxy对象。

    <openpyxl.styles.protection.Protection object>
    Parameters:
        locked=True, 
        hidden=False
    
  22. cell.pivotButton

    bool。

  23. cell.quotePrefix

    bool。

单元格的方法

  1. 【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+21+3)
    cell_offset2 = cell_offset1.offset(-1, -1) --1+2-11+3-1print(cell.coordinate, cell_offset1.coordinate, cell_offset1.coordinate)
    
    ---
    A1 D3 C2
    
  2. 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'
    
  3. 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
    
  • 4
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

此间风月不及君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值