2022-04-26 python excel操作

2022-04-26  本文已影响0人  江江江123

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代码也会报错

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

上一篇下一篇

猜你喜欢

热点阅读