使用 Python 创建数据验证时出现 OpenPyxl 问题

问题描述 投票:0回答:1

我在 Python 脚本中使用 OpenPyxl 库时遇到问题。 我能够创建数据验证,但是当我检查最终结果时,我只能在应该出现数据验证下拉表的单元格中看到我的公式 (

='Loss Level Tree'!$B$64:$G$64
)。

我可以手动解决问题(我不希望这样做,这会破坏脚本的全部目的),方法是进入数据验证设置并单击“将这些更改应用到具有相同设置的所有其他单元格” ”。手动执行此操作后,最终结果看起来是正确的。

我的脚本做错了什么?

我尝试使用 pywinauto / pywin32 库来自动化交互部分,但没有用。

脚本(考虑到出于安全目的,文件名和 wbook 已被删除):

filename = X
wbook = openpyxl.load_workbook(r'Y)
sheet = wbook["Count BO"]

validation_t = DataValidation(type='list', formula1='"={0}!$B$64:$G$64"'.format(quote_sheetname('Loss Level Tree')), allow_blank=True, showErrorMessage=False, showDropDown=False)
sheet.add_data_validation(validation_t)
validation_t.add('T2:T1048576')

wbook.save(r'E:\file)

[在此输入图片描述](https://i.sstatic.net/nS7ccMxP.png)

python excel openpyxl
1个回答
0
投票

对于包含两个工作表“Count BO”和“Loss Level Tree”的工作簿,其中“Loss Level Tree”工作表在单元格 B64:G64 中保存数据验证值,以下代码适用于我。
这是您的代码,其“validation_t”值按照注释中的建议进行了修改,如注释“### 修改为使用单引号”下的代码所示

如今,您更有可能使用 f 字符串来创建公式。我还在代码中的注释“### Modified to use f string”下包含了该选项。这个方法对我也有效。

我不知道为什么范围返回#REF,因为它应该存在或不存在,但您可以尝试使用 f 字符串。

import openpyxl
from openpyxl.worksheet.datavalidation import DataValidation
from openpyxl.utils import quote_sheetname


# filename = X
wbook = openpyxl.load_workbook('foo.xlsx')
sheet = wbook["Count BO"]

### Original
# validation_t = DataValidation(type='list', formula1='"={0}!$B$64:$G$64"'.format(quote_sheetname('Loss Level Tree')), allow_blank=True, showErrorMessage=False, showDropDown=False)

### Modified to use single quotes
# validation_t = DataValidation(type='list', formula1='={0}!$B$64:$G$64'.format(quote_sheetname('Loss Level Tree')), allow_blank=True, showErrorMessage=False, showDropDown=False)

### Modified to use f string
validation_t = DataValidation(type='list', formula1=f"'Loss Level Tree'!$B$64:$G$64", allow_blank=True, showErrorMessage=False, showDropDown=False)

sheet.add_data_validation(validation_t)
validation_t.add('T2:T1048576')

wbook.save('foo_out.xlsx')
© www.soinside.com 2019 - 2024. All rights reserved.