xlwings range.api.validation.add 抛出 com_error -2146827284
xlwings range.api.validation.add throws com_error -2146827284
我正在尝试使用 xlwings 向 Excel 工作表范围添加数据验证:
def set_validation(rng):
"""Add data validation to the given range"""
rng.value = "linear_benefit"
rng.api.validation.delete()
# xlValidateList = 3
rng.api.validation.add(3, None, None,
"linear_benefit,linear_cost,sigmoid_benefit,sigmoid_cost", None)
当我运行这个时,它停在最后一行并出现错误:
com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2146827284), None)
根据我的阅读,错误编号 -2146827284 似乎是一般性 "name not found" 错误。 VBA 适用于此:
rng.Validation.Add Type:=3, _
Formula1:="linear_benefit,linear_cost,sigmoid_benefit,sigmoid_cost")
我做错了什么?
我认为您的问题来自将 None 传递给 add
方法的第二个和第三个参数。下面修改后的行对我有用。
rng.api.Validation.add(3,1,3,"linear_benefit,linear_cost,sigmoid_benefit,sigmoid_cost")
xlwings 使 VBA 常量在 python 中可用。因此,为了使您的代码更具可读性,您可以这样做:
from xlwings import constants
validation_list = "linear_benefit,linear_cost,sigmoid_benefit,sigmoid_cost"
dv_type = constants.DVType.xlValidateList
dv_alertstyle = constants.DVAlertStyle.xlValidAlertStop
dv_operator = constants.FormatConditionOperator.xlEqual
rng.api.Validation.Add(dv_type, dv_alertstyle, dv_operator, validation_list)
我遇到的另一个问题是,在我的语言环境中,验证列表中的逗号应该替换为分号。我最终为此编写了一个小函数:
def set_validation_list(rng, validation_list):
if validation_list is None:
validation_list = [' ']
if not isinstance(validation_list, list):
raise TypeError('trying to set a validation list, but input is not a list')
dv_type = constants.DVType.xlValidateList
dv_alertstyle = constants.DVAlertStyle.xlValidAlertStop
dv_operator = constants.FormatConditionOperator.xlEqual
rng.api.Validation.Add(dv_type, dv_alertstyle, dv_operator, ';'.join(validation_list))
我正在尝试使用 xlwings 向 Excel 工作表范围添加数据验证:
def set_validation(rng):
"""Add data validation to the given range"""
rng.value = "linear_benefit"
rng.api.validation.delete()
# xlValidateList = 3
rng.api.validation.add(3, None, None,
"linear_benefit,linear_cost,sigmoid_benefit,sigmoid_cost", None)
当我运行这个时,它停在最后一行并出现错误:
com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2146827284), None)
根据我的阅读,错误编号 -2146827284 似乎是一般性 "name not found" 错误。 VBA 适用于此:
rng.Validation.Add Type:=3, _
Formula1:="linear_benefit,linear_cost,sigmoid_benefit,sigmoid_cost")
我做错了什么?
我认为您的问题来自将 None 传递给 add
方法的第二个和第三个参数。下面修改后的行对我有用。
rng.api.Validation.add(3,1,3,"linear_benefit,linear_cost,sigmoid_benefit,sigmoid_cost")
xlwings 使 VBA 常量在 python 中可用。因此,为了使您的代码更具可读性,您可以这样做:
from xlwings import constants
validation_list = "linear_benefit,linear_cost,sigmoid_benefit,sigmoid_cost"
dv_type = constants.DVType.xlValidateList
dv_alertstyle = constants.DVAlertStyle.xlValidAlertStop
dv_operator = constants.FormatConditionOperator.xlEqual
rng.api.Validation.Add(dv_type, dv_alertstyle, dv_operator, validation_list)
我遇到的另一个问题是,在我的语言环境中,验证列表中的逗号应该替换为分号。我最终为此编写了一个小函数:
def set_validation_list(rng, validation_list):
if validation_list is None:
validation_list = [' ']
if not isinstance(validation_list, list):
raise TypeError('trying to set a validation list, but input is not a list')
dv_type = constants.DVType.xlValidateList
dv_alertstyle = constants.DVAlertStyle.xlValidAlertStop
dv_operator = constants.FormatConditionOperator.xlEqual
rng.api.Validation.Add(dv_type, dv_alertstyle, dv_operator, ';'.join(validation_list))