Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Excel调用.py文件_Excel_Vba_Csv_Python 3.x_Xlwings - Fatal编程技术网

从Excel调用.py文件

从Excel调用.py文件,excel,vba,csv,python-3.x,xlwings,Excel,Vba,Csv,Python 3.x,Xlwings,我有一个用户表单,其中有一个名为PRODRLIST的按钮,当您单击它时,它应该对My Product.csv进行排序,并将其输出保存为My Product.grouped.csv。我可以在空闲状态下运行Python代码,它可以工作,但是当我定义一个函数Sort_文件时,我无法让它工作。我还是Python新手,所以我假设它很简单 Excel VBA启动Python程序的代码: Private Sub PRODRLIST_Click() RunPython ("import SortProduct;

我有一个用户表单,其中有一个名为PRODRLIST的按钮,当您单击它时,它应该对My Product.csv进行排序,并将其输出保存为My Product.grouped.csv。我可以在空闲状态下运行Python代码,它可以工作,但是当我定义一个函数Sort_文件时,我无法让它工作。我还是Python新手,所以我假设它很简单

Excel VBA启动Python程序的代码:

Private Sub PRODRLIST_Click()
RunPython ("import SortProduct; SortProduct.Sort_File()")
End Sub
排序.csv文件的Python代码:

from xlwings import Workbook, Range
# file group_by_trailing_py2.py
import os
import csv
from itertools import groupby

DELIM=';'
IN_FILENAME = 'My Product.csv'
OUT_FILENAME = 'My Product.grouped.csv'


keyfunc = lambda row: row[1:]

with open(IN_FILENAME) as csv_file:
    rows = sorted(csv.reader(csv_file, delimiter=DELIM), key=keyfunc)

it = map(lambda t: [", ".join(v[0].strip() for v in t[1]) + " "] + t[0],
        groupby(rows, key=keyfunc))

with open(OUT_FILENAME, 'w') as csv_file:
    writer = csv.writer(csv_file, delimiter=DELIM)  
for row in it:
    writer.writerow(row)  

也许我还需要定义一些东西,或者这是我的缩进?

谢谢,我把这段代码和我的按钮放在一起,它运行python。唯一的问题是它没有创建My Product.grouped.csv文件。当我在空闲状态下运行该文件时,它会创建该文件,以便我知道该部分工作正常。我缺少什么。我找不到Csv文件的完整路径。它是什么意思?是否可以在python代码中给出。但我不确定solution.import SortProduct是否调用.py文件,第二部分在SortProduct中运行函数。我以前尝试过定义函数,但无法使其工作。使用您调用python的方法,我不需要定义函数。为什么不将代码粘贴到Sort_File函数中呢?@Felix Zumstein我从上面的代码中取出了它,但它就在keyfunc=lambda row:row[1:]的正上方,之后所有内容都缩进了。我不知道如何使上面的函数和调用它从excel。简言之,以上就是我想要的排序文件函数。感谢您的帮助。如果文件名是group_by_training_py2.py,那么您需要导入group_by_training_py2,而不是SortProduct。
  Private Sub PRODRLIST_Click()
    Dim pyPrgm As String, pyScript As String
    pyPrgm = "C:\Python33\python.exe " 
'---- Space should be there after python 'exe path
    pyScript = "C:\Python33\MyScripts\sort.py" ' File path
    Call Shell(pyPrgm & pyScript, vbMaximizedFocus)
    End Sub