Автоматическое изменение каталога Python после запуска сценария Python из Excel с использованием VBA

1

Спасибо, что посмотрел на мою проблему. У меня есть скрипт python, который пишет новый CSV файл в моем текущем каталоге. Я использовал python.exe с помощью pyinstaller. То, что я делаю, запускает этот exe файл, используя форму VBA excel при нажатии кнопки. Проблема заключается в том, что после запуска exe с помощью VBA мой csv сохраняет папку документов по умолчанию вместо папки, где находится мой python.exe. Но если я запускаю python.exe напрямую без VBA, тогда он сохраняет csv в моем текущем каталоге. Итак, как я могу сохранить csv в текущем каталоге после запуска python.exe с помощью VBA

Вот мой код python, который создает новый файл csv:

csvfile = open("Mycsv" + '.csv', 'w')
cr = csv.writer(csvfile, dialect='excel')

Я также пробовал использовать: csvfile = open(os.getcwd() + "\Mycsv" + '.csv', 'w') Но не сработал.

Вот мой код VBA:

    Dim wsh As Object
    Set wsh = VBA.CreateObject("WScript.Shell")
    Dim waitOnReturn As Boolean: waitOnReturn = True
    Dim windowStyle As Integer: windowStyle = 1
    Dim errorCode As Integer
    wsh.Run Chr(34) & ThisWorkbook.path & "\python.exe" & Chr(34), windowStyle, waitOnReturn
  • 0
    Я подозреваю, что вам нужно передать путь рабочего каталога из VBA в python.exe в качестве аргумента. Программа python не может узнать, в каком каталоге находится ваш файл Excel. Это самостоятельный процесс.
  • 0
    вы можете попробовать изменить рабочий каталог WScript с помощью wsh.CurrentDirectory = ... перед wsh.Run ...
Теги:

2 ответа

0

попробуйте указать путь для вашего файла csv:

import os.path
save_path = 'C:/example/'
csvName = os.path.join(save_path, "Mycsv"+".csv") 
csvfile = open(csvName, "w")
  • 0
    Немного объяснения было бы неплохо ...
0

Перед сохранением файла вы можете использовать os.chdir(some_path_to_directory) чтобы установить текущий рабочий каталог, а затем сохранить в этом каталоге.

  • 0
    Спасибо вам, ребята, за вашу помощь. Никто, кроме Ответа @ Винсента, не работал отлично. Поэтому я использовал wsh.CurrentDirectory = Thisworkbook.path перед wsh.Run... Большое спасибо ...!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню