OpenPyXL 始终为带有超链接的单元格返回 None



(我的最终目的是append clickable cells to existing XLSX

我使用下面的代码来提取单元格的显示值和超链接。

from openpyxl import load_workbook
xlsFile='hello.xlsx'
wbook = load_workbook(xlsFile)
wsheet1= wbook.get_sheet_by_name('mysheet')
cell1 = wsheet1.cell('A1')
print cell1.value
print cell1.hyperlink
print wsheet1['A1'].value
print wsheet1['A1'].hyperlink

但它返回以下内容:

URL1
None
URL1
None

为什么hyperlink总是None?我确实为单元格A1手动添加了超链接,并且超链接在Excel 2013中有效。

不幸的是,这是一个错误。

这是 2012 年的一个错误...

一些相关线程:

使用 Python 从 Excel 中提取超链接 (.xlsx)

我对超链接实验的一些细节。我正在使用OpenPyXL 2.3.3.

  1. 我可以向单元格添加超链接
from openpyxl import load_workbook
xlsFile='hello.xlsx'
wbook = load_workbook(xlsFile)
wsheet1= wbook.get_sheet_by_name('mysheet')
cell1 = wsheet1.cell('A1')
cell1.hyperlink = r'http://www.example.com'
cell1.value=r'XXX'
wbook.save(xlsFile)
  1. 但是我无法加载 XLSX 文件并像我的问题所说的那样阅读超链接。

  2. 如果我只是加载并重新保存XLSX文件,所有现有的超链接都将丢失。是的!

from openpyxl import load_workbook
xlsFile='hello.xlsx'
wbook = load_workbook(xlsFile)
wbook.save(xlsFile)

解决方法!

将公式与 OpenPyXL 一起使用。

我的目的是append clickable cells to existing XLSX file.由于hyperlink不起作用。我改用公式=HYPERLINK(url, displayText)。幸运的是,该公式并没有像之前的实验 3 那样丢失。

from openpyxl import load_workbook
xlsFile='hello.xlsx'
wbook = load_workbook(xlsFile)
wsheet1= wbook.get_sheet_by_name('mysheet')
cell1 = wsheet1.cell('A2')
cell1.value=r'=HYPERLINK("http://www.example.com","XXX")'
wbook.save(xlsFile)

我尝试过的其他(失败的)选项:

我看着XlsxWriter。但它明确表示它不能修改现有的 XLSX 文件。因此,它不能用于追加。

我还研究了xlrd/xlwt/xlutils,不幸的是,如果要编辑现有的 excel,则必须使用 xlrd 将其加载为只读工作簿,然后使用 xlutils 将其转换(复制)为可写工作簿。砰!在复制过程中,将丢失一些内容,其中包括HYPERLINK公式。根据其文档字符串,这是一个已知的限制:

# Copyright (c) 2009-2012 Simplistix Ltd
#
# This Software is released under the MIT License:
# http://www.opensource.org/licenses/mit-license.html
# See license.txt for more details.
from xlutils.filter import process,XLRDReader,XLWTWriter
    def copy(wb):
        """
        Copy an :class:`xlrd.Book` into an :class:`xlwt.Workbook` preserving as much
        information from the source object as possible.
        See the :doc:`copy` documentation for an example.
        """
        w = XLWTWriter()
        process(
            XLRDReader(wb,'unknown.xls'),
            w
            )
        return w.output[0][1]

而且,xlwt不支持XLSX,只支持XLS。这是我决定不使用它的另一个原因。

相关内容

最新更新