美文网首页
使用python xlwings库向excel中添加数据验证报错

使用python xlwings库向excel中添加数据验证报错

作者: _icey_ | 来源:发表于2024-05-12 14:14 被阅读0次

最近工作中需要实现一个根据python读取到的数据向excel中动态添加下拉列表的功能
但是写好代码运行之后发现总是报错

  File "C:\Users\XXX\AppData\Local\Temp\gen_py\3.11\00020813-0000-0000-C000-000000000046x0x1x9.py", line 40370, in Add
    return self._oleobj_.InvokeTypes(181, LCID, 1, (24, 0), ((3, 1), (12, 17), (12, 17), (12, 17), (12, 17)),Type, AlertStyle, Operator, Formula1, Formula2)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2146827284), None)

在网上找了各种方法,看到有人说有可能是COM进程没有释放的原因,但是将进程kill了之后依然不行。后来仔细分析代码,发现少了一行清除下拉菜单数据的操作,所以才会导致首次运行是OK的,但是后面再运行就会报这个错:pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2146827284), None)

所以设置数据验证的时候,这句代码很关键!
sheet.range('A1').api.Validation.Delete()

附上正确的代码:

import xlwings as xw

app = xw.App(visible=True, add_book=False)  # 可见,只打开不新建工作薄
app.display_alerts = False  # 关闭警告
app.screen_updating = False  # 关闭屏幕更新

wb = app.books.open(r"C:\Users\sgj3szh\Desktop\New Microsoft Excel Worksheet.xlsx")  # 打开已有的 Excel 文件
# 获取工作表对象
sheet = wb.sheets.active

# 设置下拉菜单的选项
options = "Dog,Cat,Bat"  # 以逗号分隔的选项
sheet.range('A1').api.Validation.Delete()
# 在 A1 单元格上设置数据验证
sheet.range('A1').api.Validation.Add(
    Type=3, AlertStyle=1, Operator=1, Formula1=options
)
wb.save()  # 保存文件
wb.close()  # 关闭文件
app.quit()  # 关闭程序

相关文章

网友评论

      本文标题:使用python xlwings库向excel中添加数据验证报错

      本文链接:https://www.haomeiwen.com/subject/xysefjtx.html