使用 Basic 宏将公式粘贴到 Libre Calc 中

问题描述 投票:0回答:1

我正在尝试使用本机 Basic 在 Libre Calc 中复制 Excel 宏。

我遇到了我认为应该是一个简单的问题/解决方案(对于那些知道自己在做什么的人)。

我想从 3 个单元格(例如 A1 到 A3)复制公式,然后粘贴到同一张工作表中的单元格 B1 到 B3 中。我可以让它复制/粘贴值,但不能复制公式。

很高兴将单元格作为数组复制/粘贴,或通过循环单独复制/粘贴。最简单且可行的。

我已尝试以下操作(请注意,单元格引用不反映 A1:A3 / B1 到 B3,而是我的实际单元格引用),虽然复制/粘贴了公式,但它不会动态更新以反映已粘贴的单元格就像在 Excel 中一样。所以问题是,我如何修改下面的代码以允许公式动态更新?我尝试复制的第一个公式是 =SUMIF(F8:$F$13,"<>#VALUE!")*C8。当我在 Excel 中将其复制并粘贴到第一个目标单元格时,它会更新为 =SUMIF(F13:$F$13,"<>#VALUE!")*C13。更广泛的宏在循环上运行,因此当它将其复制并粘贴到下一个单元格(向下 1 行)时,它会更新为 =SUMIF(F$13:$F14,"<>#VALUE!")*C14 (依此类推)等等)。

    Dim srcRange As Object
    Dim destRange As Object
    
    ' Set the source range
    srcRange = OutputSheet.getCellRangeByPosition(8, 7, 10, 7)
    
    ' Set the destination range
    destRange = OutputSheet.getCellRangeByPosition(8, Row, 10, Row)
    
    ' Copy the formulas from the source range to the destination range
    destRange.FormulaArray = srcRange.FormulaArray

提前非常感谢。

保罗

macros copy-paste libreoffice-calc basic libreoffice-basic
1个回答
0
投票

使用Range对象的fillAuto()方法

    destRange = OutputSheet.getCellRangeByPosition(8, 7, 10, nLastRow)
    destRange.fillAuto(com.sun.star.sheet.FillDirection.TO_BOTTOM, 1)

换句话说,获取要使用公式填充的整个范围以及填充的第一个示例行,并使用必要的参数调用该方法。

© www.soinside.com 2019 - 2024. All rights reserved.