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)
  • 性能

    openpyxl attempts to balance functionality and performance. Where in doubt, we have focused on functionality over optimisation: performance tweaks are easier once an API has been established. Memory use is fairly high in comparison with other libraries and applications and is approximately 50 times the original file size, e.g. 2.5 GB for a 50 MB Excel file. As many use cases involve either only reading or writing files, the 优化模式 modes mean this is less of a problem.

    基准测试

    All benchmarks are synthetic and extremely dependent upon the hardware but they can nevertheless give an indication.

    写入性能

    benchmark code can be adjusted to use more sheets and adjust the proportion of data that is strings. Because the version of Python being used can also significantly affect performance, a driver script can also be used to test with different Python versions with a tox environment.

    Performance is compared with the excellent alternative library xlsxwriter

    Versions:
    python: 3.6.9
    openpyxl: 3.0.1
    xlsxwriter: 1.2.5
    Dimensions:
        Rows = 1000
        Cols = 50
        Sheets = 1
        Proportion text = 0.10
    Times:
        xlsxwriter            :   0.59
        xlsxwriter (optimised):   0.54
        openpyxl              :   0.73
        openpyxl (optimised)  :   0.61
    Versions:
    python: 3.7.5
    openpyxl: 3.0.1
    xlsxwriter: 1.2.5
    Dimensions:
        Rows = 1000
        Cols = 50
        Sheets = 1
        Proportion text = 0.10
    Times:
        xlsxwriter            :   0.65
        xlsxwriter (optimised):   0.53
        openpyxl              :   0.70
        openpyxl (optimised)  :   0.63
    Versions:
    python: 3.8.0
    openpyxl: 3.0.1
    xlsxwriter: 1.2.5
    Dimensions:
        Rows = 1000
        Cols = 50
        Sheets = 1
        Proportion text = 0.10
    Times:
        xlsxwriter            :   0.54
        xlsxwriter (optimised):   0.50
        openpyxl              :   1.10
        openpyxl (optimised)  :   0.57
    					

    读取性能

    Performance is measured using a file provided with a previous bug report and compared with the older xlrd library. xlrd is primarily for the older BIFF file format of .XLS files but it does have limited support for XLSX.

    The code for the benchmark shows the importance of choosing the right options when working with a file. In this case disabling external links stops openpyxl opening cached copies of the linked worksheets.

    One major difference between the libraries is that openpyxl’s read-only mode opens a workbook almost immediately making it suitable for multiple processes, this also readuces memory use significantly. xlrd does also not automatically convert dates and times into Python datetimes, though it does annotate cells accordingly but to do this in client code significantly reduces performance.

    Versions:
    python: 3.6.9
    xlread: 1.2.0
    openpyxl: 3.0.1
    openpyxl, read-only
        Workbook loaded 1.14s
        OptimizationData 23.17s
        Output Model 0.00s
        >>DATA>> 0.00s
        Store days 0% 23.92s
        Store days 100% 17.35s
        Total time 65.59s
        0 cells in total
    Versions:
    python: 3.7.5
    xlread: 1.2.0
    openpyxl: 3.0.1
    openpyxl, read-only
        Workbook loaded 0.98s
        OptimizationData 21.35s
        Output Model 0.00s
        >>DATA>> 0.00s
        Store days 0% 20.70s
        Store days 100% 16.16s
        Total time 59.19s
        0 cells in total
    Versions:
    python: 3.8.0
    xlread: 1.2.0
    openpyxl: 3.0.1
    openpyxl, read-only
        Workbook loaded 0.90s
        OptimizationData 19.58s
        Output Model 0.00s
        >>DATA>> 0.00s
        Store days 0% 19.35s
        Store days 100% 15.02s
        Total time 54.85s
        0 cells in total
    					

    Parallelisation

    Reading worksheets is fairly CPU-intensive which limits any benefits to be gained by parallelisation. However, if you are mainly interested in dumping the contents of a workbook then you can use openpyxl’s read-only mode and open multiple instances of a workbook and take advantage of multiple CPUs.

    Sample code using the same source file as for read performance shows that performance scales reasonably with only a slight overhead due to creating additional Python processes.