Python的杂项 通用使用KeyError抛出时填写在报错信息里的转义字符不会被正常识别并转义xlwings库操作xlsx文件若同时安装了“Microsoft Excel”与“WPS”脚本运行时可能会报错或优先使用“Microsoft Excel”打开文件。建议在脚本中的“使用xlwings打开表格文件”运行之前添加清空下方路径文件夹的代码。有些情况下脚本会因为这个文件夹里面的缓存文件报错。import os fC:\\Users\\{os.getlogin()}\\AppData\\Local\\Temp\\gen_py # os.getlogin()用于获取当前电脑登录的用户名称写入pandas.Dataframe值如果写入数据的区域中存在“列隐藏”或“启用了自动筛选并添加了筛选条件而使部分行被隐藏了”的情况最后的写入结果会存在很大偏差。所以在写入表格之前应先取消“行隐藏”、“列隐藏”、“自动筛选”。# 待写入的表格 df_2 pandas.DataFrame( data{ 列1: [2,58,5, 822, 5,8,2,5,38], 列2: [2, 58, 5, 822, 5, 8, 2, 5, 38] } ) # 取消工作表的行隐藏 ws_by_xlwings.api.Rows.Hidden False # ws_by_xlwings.api.Rows(2:3).Hidden False 指定某整行区域隐藏 # 取消工作表的列隐藏 ws_by_xlwings.api.Columns.Hidden False # ws_by_xlwings.api.Columns(C:T).Hidden False 指定某整列区域隐藏 # 若存在自动筛选则取消自动筛选。区域可随意指定。 if ws_by_xlwings.api.AutoFilterMode: ws_by_xlwings.range(A1).api.AutoFilter() # 写入表格的表头部分 ws_by_xlwings.range(A1).value ( df_2.columns.tolist() ) # 写入表格的内容部分 ws_by_xlwings.range(A2).value ( df_2.values.tolist() ) # 指定表格的表头区域可以精确地设置自动筛选。例如希望添加自动筛选的行在第二行则可以指定区域为“A2:B2” ws_by_xlwings.range(A1:B1).api.AutoFilter() # 由此可以发现其实这个自动筛选的接口没有包含检查“当前是否存在自动筛选”的步骤。 # 它只是将当前自动筛选的状态取反。相同的一段代码既可以关闭也可以开启自动筛选结果取决于当前表格是否已经启用自动筛选。当被覆写区域中存在“仅存在自动筛选且应用了筛选条件而使部分行被隐藏”的情况时直接写入的表格数据的实际结果为在不存在自动筛选的情况下表格数据将覆盖的区域内对所有“可见且连续”的区域分别从表格首行开始选取相同行数的数据进行覆写不对所有“不可见”的区域进行修改。详见下面各图无筛选条件的结果筛选底纹颜色为黄色的结果 1筛选底纹颜色为黄色的结果 2窗口冻结使用xlwings冻结表格窗口时需要设置app的visibleTrue即app窗口可见。如果要给多个工作表设定冻结窗口那么需要在新建工作表后就设定。否则之后就再遍历多工作表的话会因为无法选择下一个工作表的区域而报错。需要选择最左侧连续整列或最上端连续整行的区域来冻结窗口否则会因为select()函数的效果而导致最左侧列或最上端行被冻结在可视窗口之外。而至于同时设定行列的冻结方式还不清楚怎么做。range区域引用方式文本直接指定# 单一单元格 ws_by_xlwings.range(B4) # 区域 ws_by_xlwings.range(B4:C9)从1开始的索引坐标值指定。先行后列先左上角后右下角。# 单一单元格 ws_by_xlwings.range((4,2)) # 区域 ws_by_xlwings.range((4,2),(9,3))给单元格字体设置颜色的有效方式直接传入RGB三元组ws_by_xlwings.range(A2).font.color (255,0,0) # 红色调用Excel原生API。需要注意此时的颜色表示值需要用十六进制反序值即BGR。ws_by_xlwings.range(A2).api.Font.Color 0x0000FF # 红色pandas库使用pandas.query()选择记录时查询文本中的逻辑运算符and和or必须使用小写。否则会报错SyntaxError: invalid syntax。