Я написал скрипт на 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 с и ничего не отображается. Я понятия не имею, что происходит.