Python的杂项
  1. 通用

    1. 使用KeyError抛出时,填写在报错信息里的转义字符不会被正常识别并转义!!!
  2. xlwings库

    1. 操作xlsx文件

      1. 若同时安装了“Microsoft Excel”与“WPS”,脚本运行时可能会报错或优先使用“Microsoft Excel”打开文件。
      2. 建议在脚本中的“使用xlwings打开表格文件”运行之前,添加清空下方路径文件夹的代码。有些情况下,脚本会因为这个文件夹里面的缓存文件报错。
        import os f"C:\\Users\\{os.getlogin()}\\AppData\\Local\\Temp\\gen_py" # os.getlogin()用于获取当前电脑登录的用户名称
    2. 写入pandas.Dataframe值

      1. 如果写入数据的区域中存在“列隐藏”或“启用了自动筛选并添加了筛选条件而使部分行被隐藏了”的情况,最后的写入结果会存在很大偏差。所以在写入表格之前,应先取消“行隐藏”、“列隐藏”、“自动筛选”。
        # 待写入的表格 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() # 由此可以发现,其实这个自动筛选的接口没有包含检查“当前是否存在自动筛选”的步骤。 # 它只是将当前自动筛选的状态取反。相同的一段代码,既可以关闭也可以开启自动筛选,结果取决于当前表格是否已经启用自动筛选。
      2. 当被覆写区域中存在“仅存在自动筛选,且应用了筛选条件而使部分行被隐藏”的情况时,直接写入的表格数据的实际结果为:在不存在自动筛选的情况下表格数据将覆盖的区域内,对所有“可见且连续”的区域分别从表格首行开始选取相同行数的数据进行覆写,不对所有“不可见”的区域进行修改。详见下面各图:
        无筛选条件的结果
        筛选底纹颜色为黄色的结果 1
        筛选底纹颜色为黄色的结果 2
    3. 窗口冻结

      1. 使用xlwings冻结表格窗口时,需要设置app的visible=True,即app窗口可见。
      2. 如果要给多个工作表设定冻结窗口,那么需要在新建工作表后就设定。否则之后就再遍历多工作表的话,会因为无法选择下一个工作表的区域而报错。
      3. 需要选择最左侧连续整列或最上端连续整行的区域来冻结窗口,否则会因为select()函数的效果而导致最左侧列或最上端行被冻结在可视窗口之外。而至于同时设定行列的冻结方式,还不清楚怎么做。
    4. range区域引用方式

      1. 文本直接指定
        # 单一单元格 ws_by_xlwings.range("B4") # 区域 ws_by_xlwings.range("B4:C9")
      2. 从1开始的索引坐标值指定。先行后列,先左上角后右下角。
        # 单一单元格 ws_by_xlwings.range((4,2)) # 区域 ws_by_xlwings.range((4,2),(9,3))
    5. 给单元格字体设置颜色的有效方式

      1. 直接传入RGB三元组
        ws_by_xlwings.range("A2").font.color = (255,0,0) # 红色
      2. 调用Excel原生API。需要注意,此时的颜色表示值需要用十六进制反序值,即BGR。
        ws_by_xlwings.range("A2").api.Font.Color = 0x0000FF # 红色
  3. pandas库

    1. 使用pandas.query()选择记录时,查询文本中的逻辑运算符"and"和"or"必须使用小写。否则会报错SyntaxError: invalid syntax。