美文网首页
2022-04-26 python excel操作

2022-04-26 python excel操作

作者: 江江江123 | 来源:发表于2022-04-26 11:37 被阅读0次

    openpyxl

    遍历每行

        workbook= openpyxl.load_workbook(file2_path)
        sheet = workbook['sheetname']
        for row in sheet.iter_rows():
            print(row[1])
    

    直接选中,openpyxl默认从(1,1)开始不是(0,0)

    sheet.cell(row=row, column=column).value 
    

    保存并推出

        workbook.save(filename=filename)
        workbook.close()
    

    以上是一些常规操作,下面说下vba的一些坑

    1.关于保存,如果是带有vba编程的xlsm文件直接保存后会打不开,所以加载时要带参数

    workbook = openpyxl.load_workbook(filename=filename, keep_vba=True)
    

    2.关于读取函数值
    有时候我们想要读取的时函数的值,但是一般都到的是类型A1+A2的函数,想要读值同样需要加载时带参

    workbook = openpyxl.load_workbook(filename=filename, keep_vba=True, data_only=True)
    

    备注:该模式下不要做修改保存操作,不然会将excel中的函数全部变成值。

    最好将值存在二维数组中,关闭后,重新打开一个带函数的workbook编辑保存
    3.关于执行vba
    网上百分之90的文章都写了如下操作,并备注了只能在windows下执行

        xls = win32com.client.Dispatch("Excel.Application")
        xls.Application.visible = False
    
        ####调用vba程序。需要安装win32com库
        try:
            book = xls.workbooks.Open(filename)  ##存储vba代码的文件
            # xls.Application.Run("excelsheet.xlsm!modulename.macroname")
            url = module_name + "." + method_name
            xls.Application.Run(url)
            ##开始调用vba宏
            # status = xls.Application.ExecuteExcel4Macro('sbm结果计算宏文件1.xlsm!按钮1_Click()')
            # print(status)
            book.Close(SaveChanges=True)
        except Exception as ex:
            template = "An exception of type {0} occurred. Arguments:\n{1!r}"
            message = template.format(type(ex).__name__, ex.args)
            print(message)
        xls.Application.Quit()
    

    说下这个方法的原理及坑:
    原理:打开一个excel,在默认sheet执行vba方法,vba方法为 模块名+'.'+方法名,执行结束后保存退出
    坑:
    1.首先你的电脑得有office,如果是wps你会无法执行vba,就算你充了wps的企业会员,或者像我一样网上下了wps的vba插件(由于没有规范求解的引用,从有office的电脑拷贝了引用安装),但是最后wps vba执行规范求解和office的结果是不一样。不得不说wps在块确实没做好,无奈之下卸载wps,安装了office2019
    2.由于上面的方法执行时即使你用了 book.Worksheets('sheetname'),也不会去你想要的sheet目录去执行,它就在excel默认sheet的目录执行,如果要在不同得sheet执行,就要不停得切换sheet保存关闭,执行
    openyxl切换默认sheet

    workbook.active = workbook['sheetname']
    

    3.在运行win32执行vba代码的时候。不要打开office,因为执行Run的时候,你打开的office就会运行宏,强行关闭office,python代码也会报错

    最后分享一点编码心得:
    一步到位的编码固然可喜可贺,但往往复杂的逻辑需要我们一步步完成。

    相关文章

      网友评论

          本文标题:2022-04-26 python excel操作

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