win32com 击败数据验证

win32com beating data validation

我正在使用 win32com 来:

示例:

xl = win32com.client.DispatchEx("Excel.Application")
wb = xl.Workbooks.Open(<enter file path here>)
ws = wb.Worksheets(<enter tab name here>)
ws.Range(<enter range name here>).Value = 2
wb.Close(True,<enter new file path here>)

我的问题是相关命名范围的数据验证被违反(在本例中 != 2),但没有产生错误消息。我希望 Python 进程因数据验证违规而中断,甚至关闭。

可以使用Range的Validation对象来测试值:

假设单元格 B2 有一个验证规则,该值不等于 2,如 OP 的问题。

import win32com.client as wc
    
def AssertValidValue(rng,newVal,throw = True):
    oldVal = rng.Value
    rng.Value = newVal

    validation = rng.Validation

    if not validation.Value:
        rng.Value = oldVal
        if throw:
            raise ValueError('{0:} is not a valid value for cell {1:}'.format(newVal,rng.Address))
        return False

    return True
        

xl = wc.Dispatch('Excel.Application')
wb = xl.Workbooks.Open('somepath\Book1.xlsx')
ws = wb.Worksheets('Sheet1')
rng = ws.Range('B2')

try:
    AssertValidValue(rng,3)
    AssertValidValue(rng,2)
except ValueError as ve:
    print(ve)

输出:

2 is not a valid value for cell $B

并且单元格 B2 包含值 3。