2

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()wb = Workbook()、このエラーが表示されます

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 ドキュメントの更新を認識しています

モジュール.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 (サンプル コードのテスト - シナリオ 2)

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
4

1 に答える 1

0

スプレッドシートのセル B1 が null のままになっていると、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
于 2015-04-15T13:42:52.023 に答える