我写这篇文章时不确定它是否是确切的问题。我尝试用 Spyder 调试问题,以更确定无济于事。
问题是我的脚本在使用该Workbook.set_mock_caller(path)
选项时从 Spyder 中的解释器运行良好,但在 VBA 中运行不佳。
我怀疑这get_selection()
是一个空的选择,但是我不能确定,因为我无法在中间停止代码。
无论如何,我的脚本是我第一次尝试使用该软件包,因此对于以前使用过它的任何人来说都不会很复杂。该函数的作用是将 Excel 选择表按其第一列合并,并将其余列加在一起。
def xl_consolidate():
thisWB = xl.Workbook.caller()
thisSlctn = thisWB.get_selection(asarray=True, atleast_2d=True)
thisTable = thisSlctn.value
(m,n) = thisSlctn.shape
r = thisSlctn.row
c = thisSlctn.column
tableDict = dict()
tableVals = thisTable[:, 1:].astype(np.float)
for i in range(m):
thisKey = thisTable[i, 0]
if thisKey not in tableDict:
tableDict[thisKey] = tableVals[i, :]
else:
tableDict[thisKey] += tableVals[i, :]
modTable = sorted(tableDict.keys(), key = lambda k:(-tableDict[k][0], k))
modTable = [np.hstack((key, tableDict[key])) for key in modTable]
thisSlctn.clear()
xl.Range((r, c)).value = modTable
错误发生在sorted
函数中,它显示以下内容:
Error
modTable = sorted(tableDict.keys(), key = lambda k:(-tableDict[k][0], k))
IndexError: index 0 is out of bounds for axis 0 with size 0
从 VBA 调用函数时,我确实做出了选择。
作为一个附加问题,我想知道从 VBA 运行时是否可以调试代码。这将帮助我解决它。
谢谢您的帮助