0

我有一个函数调用:

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   
---------------------------

看起来像这样:

在此处输入图像描述

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

excel是否多次调用xlwings?

如果我进行手动计算,问题就会消失,但在自动计算下问题仍然存在。

4

1 回答 1

1

无论如何,我不是 XlWings 甚至不是 python 专家,但我已经重现了你的错误。我从 xlwings 页面获取了斐波那契数列示例。

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

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

    =1+1

这正如预期的那样工作。它触发 python 代码,一切都执行没有错误。如果我们稍微强调一下 excel 并要求 python 代码计算 100 个斐波那契数并将它们相加,它将产生与您相同的错误。

=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 事件 - Stackoverflow

于 2015-06-16T12:02:21.977 回答