OpenPyXL 3.0.7
  • 教程
  • 简单用法
  • 性能
  • 优化模式
  • 插入和删除行和列,移动单元格范围
  • 操纵 Pandas 和 NumPy
  • 图表
  • 注释
  • 操控样式
  • 额外工作表特性
  • 条件格式化
  • 数据透视表
  • 打印设置
  • 使用过滤器和排序
  • 验证单元格
  • 定义名称
  • 工作表表格
  • 剖析公式
  • 日期和时间
  • 保护
  • 开发
  • openpyxl 包
  • 3.0.7 (2021-03-09)
  • 3.0.6 (2021-01-14)
  • 3.0.5 (2020-08-21)
  • 3.0.4 (2020-06-24)
  • 3.0.3 (2020-01-20)
  • 3.0.2 (2019-11-25)
  • 3.0.1 (2019-11-14)
  • 3.0.0 (2019-09-25)
  • 2.6.4 (2019-09-25)
  • 2.6.3 (2019-08-19)
  • 2.6.2 (2019-03-29)
  • 2.6.1 (2019-03-04)
  • 2.6.0 (2019-02-06)
  • 2.6.-b1 (2019-01-08)
  • 2.6-a1 (2018-11-21)
  • 2.5.14 (2019-01-23)
  • 2.5.13 (brown bag)
  • 2.5.12 (2018-11-29)
  • 2.5.11 (2018-11-21)
  • 2.5.10 (2018-11-13)
  • 2.5.9 (2018-10-19)
  • 2.5.8 (2018-09-25)
  • 2.5.7 (2018-09-13)
  • 2.5.6 (2018-08-30)
  • 2.5.5 (2018-08-04)
  • 2.5.4 (2018-06-07)
  • 2.5.3 (2018-04-18)
  • 2.5.2 (2018-04-06)
  • 2.5.1 (2018-03-12)
  • 2.5.0 (2018-01-24)
  • 2.5.0-b2 (2018-01-19)
  • 2.5.0-b1 (2017-10-19)
  • 2.5.0-a3 (2017-08-14)
  • 2.5.0-a2 (2017-06-25)
  • 2.5.0-a1 (2017-05-30)
  • 2.4.11 (2018-01-24)
  • 2.4.10 (2018-01-19)
  • 2.4.9 (2017-10-19)
  • 2.4.8 (2017-05-30)
  • 2.4.7 (2017-04-24)
  • 2.4.6 (2017-04-14)
  • 2.4.5 (2017-03-07)
  • 2.4.4 (2017-02-23)
  • 2.4.3 (未发行)
  • 2.4.2 (2017-01-31)
  • 2.4.1 (2016-11-23)
  • 2.4.0 (2016-09-15)
  • 2.4.0-b1 (2016-06-08)
  • 2.4.0-a1 (2016-04-11)
  • 2.3.5 (2016-04-11)
  • 2.3.4 (2016-03-16)
  • 2.3.3 (2016-01-18)
  • 2.3.2 (2015-12-07)
  • 2.3.1 (2015-11-20)
  • 2.3.0 (2015-10-20)
  • 2.3.0-b2 (2015-09-04)
  • 2.3.0-b1 (2015-06-29)
  • 2.2.6 (未发行)
  • 2.2.5 (2015-06-29)
  • 2.2.4 (2015-06-17)
  • 2.2.3 (2015-05-26)
  • 2.2.2 (2015-04-28)
  • 2.2.1 (2015-03-31)
  • 2.2.0 (2015-03-11)
  • 2.2.0-b1 (2015-02-18)
  • 2.1.5 (2015-02-18)
  • 2.1.4 (2014-12-16)
  • 2.1.3 (2014-12-09)
  • 2.1.2 (2014-10-23)
  • 2.1.1 (2014-10-08)
  • 2.1.0 (2014-09-21)
  • 2.0.5 (2014-08-08)
  • 2.0.4 (2014-06-25)
  • 2.0.3 (2014-05-22)
  • 2.0.2 (2014-05-13)
  • 2.0.1 (2014-05-13) brown bag
  • 2.0.0 (2014-05-13) brown bag
  • 1.8.6 (2014-05-05)
  • 1.8.5 (2014-03-25)
  • 1.8.4 (2014-02-25)
  • 1.8.3 (2014-02-09)
  • 1.8.2 (2014-01-17)
  • 1.8.1 (2014-01-14)
  • 1.8.0 (2014-01-08)
  • 1.7.0 (2013-10-31)
  • Source code for openpyxl.workbook.child

    # Copyright (c) 2010-2021 openpyxl
    import re
    import warnings
    from openpyxl.worksheet.header_footer import HeaderFooter
    """
    Base class for worksheets, chartsheets, etc. that can be added to workbooks
    """
    INVALID_TITLE_REGEX = re.compile(r'[\\*?:/\[\]]')
    
    [docs]def avoid_duplicate_name(names, value): """ Naive check to see whether name already exists. If name does exist suggest a name using an incrementer Duplicates are case insensitive """ # Check for an absolute match in which case we need to find an alternative match = [n for n in names if n.lower() == value.lower()] if match: names = u",".join(names) sheet_title_regex = re.compile(f'(?P<title>{re.escape(value)})(?P<count>\\d*),?', re.I) matches = sheet_title_regex.findall(names) if matches: # use name, but append with the next highest integer counts = [int(idx) for (t, idx) in matches if idx.isdigit()] highest = 0 if counts: highest = max(counts) value = u"{0}{1}".format(value, highest + 1) return value
    class _WorkbookChild(object): __title = "" _id = None _path = "{0}" _parent = None _default_title = "Sheet" def __init__(self, parent=None, title=None): self._parent = parent self.title = title or self._default_title self.HeaderFooter = HeaderFooter() def __repr__(self): return '<{0} "{1}">'.format(self.__class__.__name__, self.title) @property def parent(self): return self._parent @property def encoding(self): return self._parent.encoding @property def title(self): return self.__title @title.setter def title(self, value): """ Set a sheet title, ensuring it is valid. Limited to 31 characters, no special characters. Duplicate titles will be incremented numerically """ if not self._parent: return if not value: raise ValueError("Title must have at least one character") if hasattr(value, "decode"): if not isinstance(value, str): try: value = value.decode("ascii") except UnicodeDecodeError: raise ValueError("Worksheet titles must be str") m = INVALID_TITLE_REGEX.search(value) if m: msg = "Invalid character {0} found in sheet title".format(m.group(0)) raise ValueError(msg) if self.title is not None and self.title != value: value = avoid_duplicate_name(self.parent.sheetnames, value) if len(value) > 31: warnings.warn("Title is more than 31 characters. Some applications may not be able to read the file") self.__title = value @property def oddHeader(self): return self.HeaderFooter.oddHeader @oddHeader.setter def oddHeader(self, value): self.HeaderFooter.oddHeader = value @property def oddFooter(self): return self.HeaderFooter.oddFooter @oddFooter.setter def oddFooter(self, value): self.HeaderFooter.oddFooter = value @property def evenHeader(self): return self.HeaderFooter.evenHeader @evenHeader.setter def evenHeader(self, value): self.HeaderFooter.evenHeader = value @property def evenFooter(self): return self.HeaderFooter.evenFooter @evenFooter.setter def evenFooter(self, value): self.HeaderFooter.evenFooter = value @property def firstHeader(self): return self.HeaderFooter.firstHeader @firstHeader.setter def firstHeader(self, value): self.HeaderFooter.firstHeader = value @property def firstFooter(self): return self.HeaderFooter.firstFooter @firstFooter.setter def firstFooter(self, value): self.HeaderFooter.firstFooter = value @property def path(self): return self._path.format(self._id)