Python 使用openpyxl标识外部工作簿链接

Python 使用openpyxl标识外部工作簿链接,python,excel,openpyxl,Python,Excel,Openpyxl,我正在尝试使用Python 3.4中的openpyxl识别包含外部工作簿引用的所有单元格。但我失败了。我的第一次尝试包括: def find_external_value(cell): # identifies an external link in a given cell if '.xls' in cell.value: has_external_reference = True return has_external_value 但是,当我将具有外部值

我正在尝试使用Python 3.4中的openpyxl识别包含外部工作簿引用的所有单元格。但我失败了。我的第一次尝试包括:

def find_external_value(cell):
# identifies an external link in a given cell

    if '.xls' in cell.value:
        has_external_reference = True

    return has_external_value
但是,当我将具有外部值的单元格值打印到控制台时,会产生以下结果:

=[1]Sheet1!$B$4
=[2]Sheet1!$B$4
因此,openpyxl显然没有像我想象的那样解析包含外部值的公式,因为方括号用于表公式,所以尝试以这种方式获取外部链接是没有意义的

我深入研究了一下,在openpyxl.workbook.names.external模块()中找到了detect_external_links函数。我不知道人们是否真的可以调用这个函数来做我想做的事情

从控制台结果来看,openpyxl似乎理解存在引用,并且似乎将它们包含在一个排序列表中。但是你能访问这个列表吗?或者检测是否存在这样的列表


无论采用哪种方式,我所需要的只是确定单元格中是否包含指向外部工作簿的链接。

在openpyxl中无法实现您想要的功能。您可以自己尝试使用库来处理文件归档,但这需要与文件格式规范密切配合。

为了实现我的目标,我决定转向openpyxl之外的领域-尽管openpyxl有许多引用外部链接的功能,但我无法找到一种简单的方法来实现我的目标进球

相反,我决定使用在内存中打开工作簿,然后搜索externalLink1.xml文件。如果存在,则工作簿包含外部链接:

import tkinter as tk
from tkinter import filedialog
from zipfile import ZipFile
Import xml.etree.ElementTree

root = tk.Tk()
root.withdraw()
file_path = filedialog.askopenfilename()

with ZipFile(file_path) as myzip:
    try:
        my_file = myzip.open('xl/externalLinks/externalLink1.xml')
        e = xml.etree.ElementTree.parse(my_file).getroot()
        print('Has external references')
    except:
        print('No external references')

一旦我有了XML文件,我就可以通过使用运行XML树来识别单元格地址、值和其他信息。

我找到了解决方案。 使用openpyxl库将xlsx文件加载为

import openpyxl
wb=openpyxl.load_workbook("Myworkbook.xlsx")

"""len(wb._external_links)        *Add this line to get count of linked workbooks*"""

items=wb._external_links
for index, item in enumerate(items):
    Mystr =wb._external_links[index].file_link.Target
    Mystr=Mystr.replace("file:///","")
    print(Mystr.replace("%20"," "))


----------------------------
Out[01]: ##Indicates that the workbook has 4 external workbook links##
/Users/myohannan/AppData/Local/Temp/49/orion/Extension Workpapers_Learning Extension Calc W_83180610.xlsx
/Users/lmmeyer/AppData/Local/Temp/orion/Complete Set of Workpapers_PPS Workpapers 123112_111698213.xlsx
\\SF-DATA-2\IBData\TEMP\ie5\Temporary Internet Files\OLK8A\LBO Models\PIGLET Current.xls
/WINNT/Temporary Internet Files/OLK3/WINDOWS/Temporary Internet Files/OLK8304/DEZ.XLS     

谢谢你,查理,有什么建议吗?没有,因为我不确定你想做什么。如果您对公式感兴趣,您可能还会发现标记器很有用。您需要查看openpyxl源代码并习惯于使用Excel存档。我将不再继续讨论这个问题。对于未来的读者:我想检查一个公式,看看它是否引用了一个外部工作簿,使用openpyxl。标记器无法工作,因为openpyxl不会在公式中显示外部引用,因此无法解析任何内容。我查了资料来源,但没有找到任何有用的东西。因此,我将对Charlie的建议采取不同的方法,看看是否可以使用适当的XML库打开Excel存档。我会回复一个答案,这不是真的。外部引用按索引链接,答案是正确的。如果您在文档中发现了这一点,请也提供一个链接,好吗?我查看了文档中提供的类和方法。阅读本文档。它可以给你一些线索