Запуск скрипта Python через Excel путем создания кнопки в листе Excel - PullRequest
0 голосов
/ 07 июня 2019

Я написал скрипт на Python, который берет табличные данные из Excel и затем сохраняет их в текстовом документе. И для этого мне нужно создать кнопку в Excel, которая выполняет всю задачу. Это хорошо работает с Python в режиме ожидания или Anaconda или Windows PowerShell, но не с сценарием VBA или макросами. Я перепробовал все, но это не работает. Помогите мне, пожалуйста!

Untitled3.py

#!/usr/bin/env python
# coding: utf-8

# In[38]:


import pandas as pd
import docx
import os
from docx.enum.text import WD_BREAK
import xlwings as xw
import numpy as np


# In[39]:


xls = pd.ExcelFile('template2.xlsm')


aa=xls.sheet_names
b=len(aa)
aa
wb = xw.Book('template2.xlsm')
active_sheet_name = wb.sheets.active.name
active_sheet_name


# In[40]:


df=pd.read_excel('template2.xlsm',sheet_name=active_sheet_name)


# In[41]:


df1=df.iloc[4:,4:]

df1.columns=['Task Id','Project Name','Account Number','No. of hours']


# In[42]:


df1


# In[43]:




doc = docx.Document('test.docx')
t = doc.add_table(rows=df1.shape[0]+1, cols=df1.shape[1])
for j in range(df1.shape[-1]):
    t.cell(0,j).text = df1.columns[j]

#for paragraph in doc.paragraphs:

 #   run = paragraph.add_run()
  #  run.add_break(WD_BREAK.PAGE)

# add the rest of the data frame
for i in range(df1.shape[0]):
    for j in range(df1.shape[-1]):
        t.cell(i+1,j).text = str(df1.values[i,j])

# save the doc


# In[44]:


doc.add_paragraph("\n")
#doc.add_paragraph("Month Name Can be given")


# In[45]:


doc.save('test.docx')


# In[46]:


f=open('test.docx','rb')
d=docx.Document(f)
#f.close()
os.startfile("test.docx")


# In[ ]:

VBA-код для запуска скрипта

Код 1:

Dim Ret_Val
Dim args As String

args = "C:\Users\shiva\Desktop\Addingproject\Untitled3.py"
Ret_Val = Shell("C:\Users\shiva\AppData\Local\Programs\Python\Python37-32\python.exe " & " " & args, vbNormalFocus)

If Ret_Val = 0 Then
    MsgBox "Couldn't run python script!", vbOKOnly

Код 2:

Sub Button2_Click()
    rsp = Shell(Environ$("COMSPEC") & " /c C:\Users\shiva\Desktop\Addingproject\Untitled3.py", vbNormalFocus)
End Sub

Работает нормально с анакондой или powershell, но не с макросами. При запуске скрипта vba командная строка открывается примерно на 0,01 с и ничего не отображается. Я понятия не имею, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...