在通过excel

时间:2015-12-07 10:01:32

标签: python excel excel-vba xlwings vba

我正在尝试使用xlwings从几个xls文件进行简单整合。 为此,我有一个all_files.xlsm文件,其中包含一个分配了宏的按钮。宏看起来像:

Sub check_data()
    RunPython ("import python_code; python_code.consolidation()")
End Sub

在同一文件夹中,我有一个文件python_code.py,其功能为"合并"内。 我还使用Workbook.set_mock_caller()以便有机会通过python接口运行代码。它看起来像:

def consolidation(file_path):
    *** smth to get the data I need ***
    ...
    *** after I got data ***
    Range('A1').table.clear_contents() #string1
    Range('A1').value = data #string2

def main():
    consolidation(file_path)

if __name__ == '__main__':
    xl.Workbook.set_mock_caller(path_to_file)
    main()

问题是,当我通过excel文件中的按钮运行脚本时,最后两个字符串(string1和string2) - 范围(' A1')。table.clear_contents()和Range(&# 39; A1')。值=数据不起作用。虽然其余代码工作正常(但是,它也包含xlwing)。此外,如果我使用set mock caller通过python接口运行脚本,它可以正常工作,包括string1和string2(在代码中标记)。

非常感谢任何帮助和建议!

1 个答案:

答案 0 :(得分:1)

我找到了解决问题的方法。要在python中使用xlwings,您应该在excel文件中导入xlwings.bas(请参阅xlwings手册)。事实证明,在我更新xlwings之前,我为此宏导入了它。所以我删除了这个文件并导入了一个新文件。现在一切都很好。