日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

用python批量执行VBA代码

發(fā)布時間:2025/3/17 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用python批量执行VBA代码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

先說下背景環(huán)境

  1. 公司需要問卷調(diào)查,有兩份問卷, 1)是spss問卷,2)是excel問卷。spss問卷數(shù)據(jù)不全,但有各種標簽, excel呢, 生成的數(shù)據(jù)直接把選項變成了值

  2. 現(xiàn)在需要把excel的選項值變成1, 2這種數(shù)字{1:“滿意”}

  3. 妹子已經(jīng)把vba寫好了。(不忍直視!)

?

由于需要執(zhí)行很多vba命令,我就用py的字符串拼接,生成了,900多份,懷疑vba的代碼有問題,憑直覺,但我不會vba,又懶得查,只能讓cpu去做重復(fù)工作了

?

需要模塊win32com

安裝方法

```

python3 -m pip install pypiwin32

```

?

生成vba命令

#!/usr/bin/env python # -*- coding:utf-8 -*- import savReaderWriterfilepath = "/opt/code/my_code/testStata/5976d077606f07d4418b46eb160938.sav"a = '''Dim m m = 1 Columns("'''b = '''").Select m = 1 On Error GoTo Err_Handle'''c = '''For m = 1 To 65 Selection.Find(What:="'''d = '''", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False, SearchFormat:=False).Activate ActiveCell.Replace What:="'''e = '''", Replacement:="'''f = '''", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Next m '''g = ''' Exit Sub Err_Handle: End Sub'''sum = 0totalStr = '\n************hello************\n\n'excelList = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',"AA","AB","AC","AD","AE","AF","AG","AH","AI","AJ","AK","AL","AM","AN","AO","AP","AQ","AR","AS","AT","AU","AV","AW","AX","AY","AZ","BA","BB","BC","BD","BE","BF","BG","BH","BI","BJ","BK","BL","BM","BN","BO","BP","BQ","BR","BS","BT","BU","BV","BW","BX","BY","BZ","CA","CB","CC","CD","CE","CF","CG","CH","CI","CJ","CK","CL","CM","CN","CO","CP","CQ","CR","CS","CT","CU","CV","CW","CX","CY","CZ","DA","DB","DC","DD","DE","DF","DG","DH","DI","DJ","DK","DL","DM","DN","DO","DP","DQ","DR","DS","DT","DU","DV","DW","DX","DY","DZ","EA","EB","EC","ED","EE","EF","EG","EH","EI","EJ","EK","EL","EM","EN","EO","EP","EQ","ER","ES","ET","EU","EV","EW","EX","EY","EZ","FA","FB","FC","FD","FE","FF","FG","FH","FI","FJ","FK","FL","FM","FN","FO","FP","FQ","FR","FS","FT","FU","FV","FW","FX","FY","FZ","GA","GB","GC","GD","GE","GF","GG","GH","GI","GJ","GK","GL","GM","GN","GO","GP","GQ","GR","GS","GT","GU","GV","GW","GX","GY","GZ","HA","HB","HC","HD","HE","HF","HG","HH","HI","HJ","HK","HL","HM","HN","HO","HP","HQ","HR","HS","HT","HU","HV","HW","HX","HY","HZ","IA","IB","IC","ID","IE","IF","IG","IH","II","IJ","IK","IL","IM","IN","IO","IP","IQ","IR","IS","IT","IU","IV","IW","IX","IY","IZ","JA","JB","JC","JD","JE","JF","JG","JH","JI","JJ","JK","JL","JM","JN","JO","JP","JQ",]def readSpss():with savReaderWriter.SavReader(filepath, ioUtf8=True) as read:ret = read.getSavFileInfo()return ret[4], ret[2], ret[5], ret[6]def vbaStr(totalStr, sum, readSpss):formats, varnames, varLabels, valueLabels = readSpss()for i in range(len(varnames)):if varnames[i] in valueLabels:subvalueLables = {}for j in valueLabels[varnames[i]]:subvalueLables[int(j)] = valueLabels[varnames[i]][j]# totalStr += a + excelList[i] + ":" + excelList[i] + bfor zz in subvalueLables:totalStr += a + excelList[i] + ":" + excelList[i] + btotalStr += c + subvalueLables[zz] + d + subvalueLables[zz] + e + str(zz) + ftotalStr += gsum += 1totalStr += "\n************hello************\n\n"# totalStr += gtotalStr += "=============================\n\n"else:continuereturn totalStr, sumtotalStr, sum = vbaStr(totalStr, sum, readSpss)print(totalStr)print(sum) View Code

?

用Python在執(zhí)行vba命令方法,有點類似執(zhí)行shell的形式,但必須在windows環(huán)境下面執(zhí)行,不能在linux下面

注意問題:

  1. 必須另存為xlsm文件格式2. 第二,在執(zhí)行Python腳本的時候必須是打開excel的3. 必須新建模塊(vba中)4. vba代碼必須有函數(shù)5. office必須開啟宏,否則不生效
  6. 打開vba快捷鍵alt + f11

?

?

?

?

最后看代碼

vba代碼

Sub test() 《============這個函數(shù)很重要,對應(yīng)著python Dim m m = 1 Columns("G:G").Select m = 1 On Error GoTo Err_HandleFor m = 1 To 65 Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False, SearchFormat:=False).Activate ActiveCell.Replace What:="", Replacement:="1", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Next mExit Sub Err_Handle: End Sub

?

python代碼

#!/usr/bin/env python # -*- coding:utf-8 -*-import win32com.clientfilename = "C:/Users/Administrator/Desktop/test.xlsm" xls = win32com.client.Dispatch('Excel.Application') xls.Workbooks.Open(Filename=filename) xls.DisplayAlerts = 0 xls.Run("test1")

??

總結(jié)

以上是生活随笔為你收集整理的用python批量执行VBA代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。