自动将公式填充到范围 xlwings 中最后一个占用的单元格

Autofill the Formula to the last occupied cell in a range xlwings

提问人:Biplab1985 提问时间:10/29/2023 最后编辑:Biplab1985 更新时间:10/30/2023 访问量:57

问:

我想将公式拖到单元格的最后一个占用范围,例如excel。 我使用复制粘贴从范围 CN6:CY6 到 CN8:CY8 添加了公式,并带有单元格引用,但现在我想将公式拖动/自动填充到占用范围的其余部分,我该怎么做?

import xlwings as xw
wb=xw.Book("example.xlsb")
wb.sheets[1].range("cn8:cy8").color=None
wb.sheets[1].range("cn8:cy8").font.color = (0, 0, 0)
lastRow = wb.sheets[1].range(8,2).end('down').row
wb.sheets[1].range('CN8:CY8').api.AutoFill(lastRow,
                               AutoFillType.xlFillDefault)

请注意,我有“从”范围,但没有固定的“到”范围,因为数据可能会不时变化,我使用了最后一行功能来确定最后占用的单元格。如何在“自动填充”代码行中使用 lastrow

XLWINGS公司

评论

0赞 moken 10/29/2023
这回答了你的问题吗?使用 API.AutoFill 的 XLWings:如何将 Range 作为 Range.AutoFill 方法的参数传递
0赞 Biplab1985 10/29/2023
在发布我的问题之前,我尝试过这个,但它对我不起作用
0赞 moken 10/29/2023
您应该记下您阅读了建议的帖子,但它对您不起作用,如果它做了什么/没有做什么,错误等怎么办。帖子中的方法确实有效,尽管我只能说明Felix Zumstein回答的Windows选项。如果您使用的是 MACOS,那么由于该操作系统的更改,它可能不再按列出的方式工作,但应该仍然可以。
0赞 moken 10/29/2023
对于 Windows,该行 or 会将公式从范围“CN8:CY8”向下复制到“CN20:CY20”,因此填充第 9 - 20 行。如果您尝试过此操作,请出示您的代码。ws.range('CN8:CY8').api.AutoFill(ws.range("CN8:CY20").api, AutoFillType.xlFillDefault)wb.sheets[1].range('N8:Y8').api.AutoFill(wb.sheets[1].range("N8:Y20").api, AutoFillType.xlFillDefault)
0赞 Biplab1985 10/29/2023
是的,你是对的。它一次可以定义“到”范围,但我不必范围。我已经稍微更新了我的问题

答:

0赞 moken 10/30/2023 #1

好的,所以只需在代码中使用 last_row 变量即可。
确保 B 列确实有最后一行,否则返回的值将是工作表的最大行数,1048576。

import xlwings as xw
from xlwings.constants import AutoFillType


xlfile = 'example.xlsb'

with xw.App(visible=False) as app:
    wb = xw.Book(xlfile)
    wb.sheets[1].range("cn8:cy8").color = None
    wb.sheets[1].range("cn8:cy8").font.color = (0, 0, 0)
    lastRow = wb.sheets[1].range(8, 2).end('down').row

    wb.sheets[1].range('CN8:CY8').api.AutoFill(wb.sheets[1]
                      .range(f"CN8:CY{lastRow}").api, AutoFillType.xlFillDefault)


    wb.save(xlfile)