在自动计算时由Worksheet_Calculate触发xlwings错误

时间:2015-06-05 17:02:27

标签: python xlwings

我有一个函数调用:

Private Sub Worksheet_Calculate()
    Debug.Print Now()

    If check_data_required_is_present Then
        Call d2s_caller
    Else

    End If


End Sub

d2s_caller是:

Sub d2s_caller()
Application.StatusBar = "Strike conversion"
    RunPython ("import f_v; f_v.calc_s_callback()")
Application.StatusBar = ""

End Sub

当我删除要触发计算的数组时,我(通常会)得到以下错误:

---------------------------
Error
---------------------------

Press Ctrl+C to copy this message to the clipboard.
---------------------------
OK   
---------------------------

看起来像这样:

enter image description here

有没有人经历过这个?这是xlwings的非线程安全方面吗?

excel会多次调用xlwings吗?

如果我在手动计算中,问题就会消失,但在自动状态下它会持续存在。

1 个答案:

答案 0 :(得分:1)

无论如何我不是XlWings甚至是python专家,但我已经复制了你的错误。我从xlwings页面中获取了Fibonacci Sequence示例。

Sub Worksheet_Calculate()
    If Sheet1.Range("A2").Value = 1 Then
        Debug.Print Now()
        RunFrozenPython ("fibonacci.exe")
    End If
End Sub

首先通过简单的计算测试触发器,看看它是否有效。 在一个单元格中:

    =1+1

这与预期一样有效。它触发python代码,一切都没有错误地执行。 如果我们强调一点,并要求python代码计算100个Fibonacci数字并将它们相加它将产生与你相同的错误。

=SUM(C:C)

我的猜测是Excel确实多次调用。可能在第一次调用完成之前调用xlwings存在一些问题。

您可以尝试使用Worksheet_Change,只使用一个单元格来最小化python调用。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("A6")) Is Nothing Then
        Debug.Print Now()
        RunFrozenPython ("fibonacci.exe")
    End If
End Sub

Excel Worksheet_Change Event - Stackoverflow