win32com 击败数据验证
win32com beating data validation
我正在使用 win32com 来:
- 打开 Excel、
的实例
- 更改一些单元格值,并且
- 保存并关闭 Excel 的实例。
示例:
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。
我正在使用 win32com 来:
- 打开 Excel、 的实例
- 更改一些单元格值,并且
- 保存并关闭 Excel 的实例。
示例:
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。