我想一次将几十个 excel 表转换为 csv 文件。我有一个可以进行转换的工作 .vbs 文件,我想借助 python 代码在不同的工作表上执行这个 .vbs 文件。我有以下 2 个版本的 python 代码:
版本 1:
import os
import sys
import subprocess
FolderName=sys.argv[1]
FileList=os.listdir(FolderName)
NewList=[]
for i in FileList:
NewItem=i.split('.xls')
NewXls=FolderName+"\\"+NewItem[0]+".xlsx "
NewCsv=FolderName+"\\"+NewItem[0]+".csv"
NewCommand="C:\\Users\\user\\XlsToCsv.vbs "+sys.argv[2]+" "+NewXls+NewCsv
subprocess.call(NewCommand)
版本 2:
import os
import sys
import subprocess
def main(directory,extension,sheet):
for filename in os.listdir(directory):
if filename.endswith(extension):
path = os.path.join(directory, filename)
base = os.path.join(directory, filename[:len(filename)-len(extension)])
print base
new_xls = base + extension
new_csv = base + '.csv'
subprocess.call(['C:\\Users\\user\\XlsToCsv.vbs', sheet, new_xls, new_csv])
main(sys.argv[1],sys.argv[2],sys.argv[3])
没关系,我试了一下,我得到了同样的错误信息:
Traceback (most recent call last):
File "C:/Users/user/Desktop/Work/XlsDir.py", line 16, in <module>
subprocess.call(NewCommand)
File "C:\Python27\lib\subprocess.py", line 524, in call
return Popen(*popenargs, **kwargs).wait()
File "C:\Python27\lib\subprocess.py", line 711, in __init__
errread, errwrite)
File "C:\Python27\lib\subprocess.py", line 948, in _execute_child
startupinfo)
WindowsError: [Error 193] %1 er ikke et gyldigt Win32-program
错误消息的最后一行大致意思是,它不是有效的 Win32 程序。
到目前为止我尝试了什么:
- 如果我使用正确的参数(工作表、.xls 文件的名称和 .csv 文件的名称)从命令提示符运行 .vbs 文件,那么它工作正常。
- 如果我打印 python 生成的命令并将它们复制到命令提示符中,它们可以正常工作。
- 我在不同的路径中尝试了“\”和“\”的所有组合,没有任何更好的选择。
- 我尝试通过将 sys.argv[i] 参数替换为特定参数来执行程序,然后从命令提示符执行 .py 文件。我收到相同的错误消息。
我希望你们中的一些人能帮助我。非常感谢!
最佳答案
详细说明 Ansgar 的补救措施:
从命令行“工作”启动 .vbs,因为 shell 将扩展名 .vbs 与应用程序相关联(例如 cscript/wscript;参见 ftype、assoc、cscript//E、cescript//S)。
subprocess.call()
不打开 shell,因此要么指定应用程序(c|wscript.exe
),要么自己启动 shell:
import subprocess
#subprocess.call("notepad") # works
#subprocess.call("dir") # [Error 2] The system cannot find the file specified
# no shell, no intrinsics
#subprocess.call("19112944.vbs") # [Error 193] %1 is not a valid Win32 application
# no shell, can't associate .vbs with c|wscript.exe
subprocess.call("cscript 19112944.vbs") # works
subprocess.call("cmd /c 19112944.vbs") # works
# have shell, can associate .vbs with c|wscript.exe
关于python - 使用 python 创建的参数执行 vbs 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19112944/