Я хотел бы конвертировать десятки файлов excel в файлы csv сразу. У меня есть рабочий файл .vbs, который делает преобразование, и я хотел бы выполнить этот .vbs-файл на разных листах с помощью кода python. У меня есть следующие 2 версии кода Python:Выполнение файла vbs с аргументами, созданными python
Version 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.
То, что я пытался до сих пор:
- Если я запускаю файл .vbs из командной строки с нужными аргументами (лист, имя файла .xls и имя файла .csv), то работает отлично.
- Если я печатаю команды, которые генерирует python и копирует их в командной строке, они работают нормально.
- Я пробовал каждую комбинацию '\' и '\' в разных дорожках, и ничего не улучшалось.
- Я попытался выполнить программы с заменой аргументов sys.argv [i] конкретными аргументами и затем выполнить .py-файл из командной строки. Я получаю то же сообщение об ошибке.
Я надеюсь, что некоторые из вас могут мне помочь. Большое спасибо!
:-) Я нашел решение через два дня. :-) Я не удаляю свой вопрос, возможно, другим это понадобится. Вы должны добавить «wscript.exe» в аргумент subprocess.call ... «NewCommand =» wscript.exe C: \\ Users \\ user \\ XlsToCsv.vbs "+ sys.argv [2] +" "+ NewXls + NewCsv " – Rieux
Вы пытались использовать другой способ выполнения команды, например, используя' os.system'? Кроме того, вы можете посмотреть там: http://stackoverflow.com/questions/5538671/python-call-to-external- program-results-in-error-193-1-is-not-a-valid-win32-возможно, это может вам помочь. – user2725093