如何使用带有动态数组的 xlwings 异步模式?

How to use xlwings asynchronous mode with dynamic arrays?

使用 async_mode='threading' 时,我注意到以下行为:

@xw.func(async_mode='threading')
@xw.ret(expand='table')
def test_fun():
    time.sleep(2)
    return [[0], [1], [2]]

上面的代码将正确输出 0, 1, 2 但这将输出一个数组(即 excel 公式将有 {} 括号)并且它会覆盖它下面的任何内容,即不会使用该溢出警告,如果不编辑整个数组就无法编辑它。

@xw.func(async_mode='threading')
def test_fun():
    time.sleep(2)
    return [[0], [1], [2]]

然而,这似乎更可取,因为它输出一个动态数组(如果我删除 async_mode)只输出 0,公式变成 @test_fun(),因此只有 returns第一个值。

在 v0.15.8 上遇到此行为

你的第二个例子是正确的做法并且对我有用。第一个版本仅适用于您特别希望使用旧版 CSE 数组的情况,通常只有当您的 Excel 版本不支持动态数组时才会出现这种情况。

只需确保完全删除公式的 CSE 版本,然后重新导入函数并简单地从 Excel.

中的单元格调用 =test_fun()

这应该从 v0.19.0 版本开始工作 - 这是遇到的问题。 OP 有 v0.15.8.

https://github.com/xlwings/xlwings/issues/1277