xlwings module.py从Excel中调用python

我试图从excel调用module.py文件时不断收到这个错误

Traceback (most recent call last): File "<string>", line 1, in <module> File "F:\ana\module.py", line 6, in rand_numbers wb = Workbook.caller() # Creates a reference to the calling Excel file AttributeError: type object 'Workbook' has no attribute 'caller' 

当我用wb = Workbook.caller()replacewb = Workbook.caller()时收到此错误

 Traceback (most recent call last): File "<string>", line 1, in <module> File "F:\ana\module.py", line 11, in rand_numbers rand_num = np.random.randn(n, n) File "mtrand.pyx", line 1341, in mtrand.RandomState.randn (numpy\random\mtrand\mtrand.c:11537) File "mtrand.pyx", line 1454, in mtrand.RandomState.standard_normal (numpy\random\mtrand\mtrand.c:11839) File "mtrand.pyx", line 142, in mtrand.cont0_array (numpy\random\mtrand\mtrand.c:1867) TypeError: an integer is required 

另外[场景2],我可以从Excel中调用一个python文件,同时使用这个示例代码

 from xlwings import Workbook, Sheet, Range, Chart wb = Workbook() # Creates a connection with a new workbook #wb = Workbook.caller() Range('A1').value = 'Foo 1' Range('A2').value = [['Foo 1', 'Foo 2', 'Foo 3'], [10.0, 20.0, 30.0]] Range('A13').table.value # or: Range('A1:C2').value Sheet(1).name chart = Chart.add(source_data=Range('A2').table) 

但是,在Excel中的调用只适用于wb = Workbook()而不是wb = Workbook.caller()

我知道这个API文档更新

module.py

 import numpy as np from xlwings import Workbook, Range def rand_numbers(): """ produces std. normally distributed random numbers with shape (n,n)""" wb = Workbook.caller() # Creates a reference to the calling Excel file n = Range('Sheet1', 'B1').value # Write desired dimensions into Cell B1 rand_num = np.random.randn(n, n) Range('Sheet1', 'C3').value = rand_num 

VBA代码

 Sub MyMacro() RunPython ("import module; module.rand_numbers()") End Sub 

testing.py (testing示例代码 – scheme2)

 from xlwings import Workbook, Sheet, Range, Chart wb = Workbook() # Creates a connection with a new workbook #wb = Workbook.caller() Range('A1').value = 'Foo 1' Range('A2').value = [['Foo 1', 'Foo 2', 'Foo 3'], [10.0, 20.0, 30.0]] Range('A13').table.value # or: Range('A1:C2').value Sheet(1).name chart = Chart.add(source_data=Range('A2').table) 

VBA代码

 Sub MyMacro() RunPython ("import testing") End Sub 

当电子表格中的单元格B1保留为空时,我得到与xlwings版本0.3.4和winpython 2.7.9.4完全相同的错误,因此错误“需要整数”。 因此,通过单元格B1传递numpy数组的维度将解决第一组示例代码中的问题。

 Traceback (most recent call last): File "<string>", line 1, in <module> File "mymodule.py", line 8, in rand_numbers rand_num = np.random.randn(n, n) File "mtrand.pyx", line 1352, in mtrand.RandomState.randn (numpy\random\mtrand\mtrand.c:13134) File "mtrand.pyx", line 1465, in mtrand.RandomState.standard_normal (numpy\random\mtrand\mtrand.c:13467) File "mtrand.pyx", line 145, in mtrand.cont0_array (numpy\random\mtrand\mtrand.c:1810) TypeError: an integer is required