我正在尝试使用xlwing模块将Excel中的数据(即期费率和成熟度)输入到python代码中。
在我的python文件(pythonLearn.py)中,我有以下几行
import os
import numbers
import xlwings as xw
import datetime as dt
import numpy as np
import YieldCurve as yc
@xw.func
def py_Rate(T, spot_rate):
yc.add_spot_rate(T, spot_rate)
在我的类模块文件(YieldCurve.py)中,我有以下代码
import math
class ForwardRates(object): # create a bootstrap yieldcurve
def __init__(self):
self.forward_rates = []
self.spot_rates = dict()
def add_spot_rate(self, T, spot_rate):
self.spot_rates[T] = spot_rate
def __calculate_forward_rate___(self, T1, T2):
R1 = self.spot_rates[T1]
R2 = self.spot_rates[T2]
forward_rate = (R2*T2 - R1*T1)/(T2 - T1)
return forward_rate
def get_forward_rates(self):
periods = sorted(self.spot_rates.keys())
for T2, T1 in zip(periods, periods[1:]):
forward_rate = self.__calculate_forward_rate___(T1, T2)
self.forward_rates.append(forward_rate)
return self.forward_rates
当我尝试使用命令添加点率(在Excel中)时,'= py_Rate(1.0,10.5);我收到以下错误
AttributeError:'module'对象没有属性'add_spot_rate'fr.add_spot_rate(T,spot_rate)文件“c:\ users \ admin \ documents \ pythonlearning \ pythonLearningExcel5.py”,第155行,py_Rate ret = func( * args)文件“C:\ Python34 \ lib \ site-ckages \ xlwings \ udfs.py”,ine 250,在call_udf中res = call_udf(脚本,fname,args,this_workbook,FromVariant(调用者))文件“C:\ Python34 \ lib \ site-packages \ xlwings \ server.py“,第190行,在CallUDF中返回func(* args)文件”C:\ Python34 \ lib \ site-packages \ win32com \ server \ policy.py“,第586行,在 invokeex 中返回S_OK,-1,self。 invokeex (dispid,lcid,wFlags,args,None,None)文件“C:\ Python34 \ lib \ site- packages \ win32com \ server \ policy.py“,第283行,在调用中返回self。调用(dispid,lcid,wFlags,args)文件”C:\ Python34 \ lib \ site-packages \ win32com \ server \ policy.py“,第278行,调用
任何xlwings / python(3.4是我的版本,顺便说一句)谁可以提供帮助?
亲切的问候
答案 0 :(得分:0)
从专家那里找到,我在这里提交了有效的解决方案。 显然,人们不能直接使用类方法,你需要做这样的事情:
import xlwings as xw
import numpy as np
import yieldCurve as fr
@xw.func
def py_Rate(T, spotRate):
fwd_rate = fr.ForwardRates()
fwd_rate.add_spot_rate(T, spotRate)