使用openpyxl识别外部的worbook链接

我试图确定所有包含外部工作簿引用的单元格,在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显然不以我想象的方式parsing包含外部值的公式,因为方括号用于表公式,所以尝试以这种方式来获取外部链接是没有意义的。

我挖了一点深,发现openpyxl.workbook.names.external模块( reference )中的detect_external_links函数。 我不知道是否可以调用这个函数来做我想做的事情。

从控制台结果看来,似乎openpyxl理解有引用,并似乎包含在一个sorting列表中。 但是可以访问这个列表吗? 或者检测这个列表是否存在?

无论哪种方式 – 我所需要的是确定一个单元格是否包含指向外部工作簿的链接。 任何和所有的build议将受到欢迎。

为了实现我的目标,我决定转向openpyxl之外 – 尽pipeopenpyxl有许多涉及外部链接的函数,但我无法find一个简单的方法来实现我的目标。

相反,我决定使用ZipFile在内存中打开工作簿,然后searchexternalLink1.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文件,我就可以继续通过使用ElementTree在XML树中运行来识别单元格地址,值和其他信息。

在openpyxl中没有办法做你想做的事情。 您可以自由尝试使用该库来自行处理文件归档,但这需要与文件格式规范密切合作。