使用 Python 读取 Excel 动态文件参考
Read Excel dynamic file reference using Python
我正在尝试读取 excel 文件,该文件使用 Python 对其单元格进行了动态工作簿引用。
当我使用 openpyxl 并阅读它时,它 returns 带有动态工作簿的单元格引用为 '=[1]Sheet0!T10'
而不是:
'='Q:\OPERATIONS\PERFORMANCE\ANALYSIS19[analysis.xlsx]Sheet0!T10'
我需要有关正在引用的文件路径的信息。
这是重现问题的代码:
1: from openpyxl import load_workbook
2: import pandas as pd
3: xls = r"C:\TEST\test.xlsx"
4: wb = load_workbook(filename = xls, read_only=True)
5: ws = wb("sheet1")
6: df = pd.DataFrame(ws.values)
7: ws["E11"].value
这个returns '=[1]Sheet0!T10'
当我在第 6 行转换为数据帧时,它 returns df 的值不是公式,所以这没有帮助。
python中引用的文件路径有没有更好的提取包或方法?
感谢@Charle Clark 提供了解决此难题的线索。此 link 可用于在 Excel 文件中获取动态工作簿引用的答案。
for root, dirs, files in os.walk(root, topdown=False):
for name in files:
if name.count(".xls"):
try:
xls = os.path.join(root, name)
wb = load_workbook(filename = xls, read_only=True)
print(xls)
except Exception as err:
msg = "ERROR: {} file failed to read!".format(xls)
print(msg)
print(err)
f.write(str(err)+"\n")
continue
items = wb._external_links
msg = "There are {} external links..".format(len(items))
print(msg)
if len(items) > 0:
xls_dict[xls] = []
for index, item in enumerate(items):
Mystr = wb._external_links[index].file_link.Target
Mystr = Mystr.replace("file:///","").replace("%20"," ")
print(Mystr)
此代码可以更简单,但可以完成工作。另外,openpyxl不打开旧版本excel(xls),这个需要单独处理。您可以通过搜索 xlsx 或发布错误消息来过滤掉,如上所示。
我正在尝试读取 excel 文件,该文件使用 Python 对其单元格进行了动态工作簿引用。 当我使用 openpyxl 并阅读它时,它 returns 带有动态工作簿的单元格引用为 '=[1]Sheet0!T10' 而不是:
'='Q:\OPERATIONS\PERFORMANCE\ANALYSIS19[analysis.xlsx]Sheet0!T10'
我需要有关正在引用的文件路径的信息。 这是重现问题的代码:
1: from openpyxl import load_workbook
2: import pandas as pd
3: xls = r"C:\TEST\test.xlsx"
4: wb = load_workbook(filename = xls, read_only=True)
5: ws = wb("sheet1")
6: df = pd.DataFrame(ws.values)
7: ws["E11"].value
这个returns '=[1]Sheet0!T10'
当我在第 6 行转换为数据帧时,它 returns df 的值不是公式,所以这没有帮助。 python中引用的文件路径有没有更好的提取包或方法?
感谢@Charle Clark 提供了解决此难题的线索。此 link 可用于在 Excel 文件中获取动态工作簿引用的答案。
for root, dirs, files in os.walk(root, topdown=False):
for name in files:
if name.count(".xls"):
try:
xls = os.path.join(root, name)
wb = load_workbook(filename = xls, read_only=True)
print(xls)
except Exception as err:
msg = "ERROR: {} file failed to read!".format(xls)
print(msg)
print(err)
f.write(str(err)+"\n")
continue
items = wb._external_links
msg = "There are {} external links..".format(len(items))
print(msg)
if len(items) > 0:
xls_dict[xls] = []
for index, item in enumerate(items):
Mystr = wb._external_links[index].file_link.Target
Mystr = Mystr.replace("file:///","").replace("%20"," ")
print(Mystr)
此代码可以更简单,但可以完成工作。另外,openpyxl不打开旧版本excel(xls),这个需要单独处理。您可以通过搜索 xlsx 或发布错误消息来过滤掉,如上所示。