2016-02-28 29 views
0

我使用xlwings 0.6.4。如果從蟒提示符下執行這些行工作如記錄:使用範圍從@xlfunc錯誤

from xlwings import xlfunc, Range, Workbook 
wb = Workbook.active() 
Range('B1').value = 'set' 

但是,如果我把代碼放入@xlfunc宏,加載(Excel2016在Windows7)的UDF在Excel和執行「= TEST_SET()」,我獲得一個錯誤。

from xlwings import xlfunc, Range, Workbook 

@xlfunc 
def test_set(): 
    wb = Workbook.active() 
    Range('B1').value = 'set' 
    return 'set ok!' 

和錯誤是:

pythoncom error: Python error invoking COM method. 

Traceback (most recent call last): 
    File "C:\Python27\lib\site-packages\win32com\server\policy.py", line 277, in _ 
Invoke_ 
    return self._invoke_(dispid, lcid, wFlags, args) 
    File "C:\Python27\lib\site-packages\win32com\server\policy.py", line 282, in _ 
invoke_ 
    return S_OK, -1, self._invokeex_(dispid, lcid, wFlags, args, None, None) 
    File "C:\Python27\lib\site-packages\win32com\server\policy.py", line 585, in _ 
invokeex_ 
    return func(*args) 
    File "C:\Python27\lib\site-packages\xlwings\server.py", line 179, in Call 
    return ToVariant(obj(*pargs, **kwargs)) 
    File "c:\users\az\projects\test_set\test_set.py", line 6, in test_set 
    Range('B1').value = 'set' 
    File "C:\Python27\lib\site-packages\xlwings\main.py", line 901, in value 
    self.row1, self.col1, row2, col2), data) 
    File "C:\Python27\lib\site-packages\xlwings\_xlwindows.py", line 273, in set_v 
alue 
    xl_range.Value = data 
    File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 565, in 
__setattr__ 
    self._oleobj_.Invoke(entry.dispid, 0, invoke_type, 0, value) 
com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -214682 
7284), None) 

請幫助!我做錯了什麼?

回答

1

用戶定義函數只能操作調用單元,這意味着您可以通過​​讀取,但不能爲其分配值。您只能通過返回單個值(如數字或字符串)或二維形狀(如嵌套列表或陣列公式的numpy數組)來更改單元格的值。

+0

謝謝!這就說得通了。 (在文檔中有解釋嗎?我錯過了嗎?)這意味着UDF比宏更強大。好。 – Sasha

+0

但是這段代碼沒有工作(它只是設置一個單元格爲「1-Jan-00」):'@xlfunc def test_set(): wb = Workbook.active() return [[1,2], [3,4],[5,6]] – Sasha

+0

這是Excel UDF的標準行爲,但我會確保文檔改進該主題。關於你的*沒有工作*評論:將單元格重新格式化爲'General'而不是日期,並且您需要在Excel側面使用數組公式,參見[這裏](http://docs.xlwings.org/udfs.html #陣列式-I-而不-numpy的) –