请求编写LibreOffice Calc宏:跨表复制指定单元格区域
LibreOffice Calc宏:批量复制单元格区域到指定位置
问题描述
需要编写LibreOffice Calc宏,将Sheet1中B2:D5区域的内容复制到Sheet2的A1单元格为起始位置。尝试的代码无效果:
Sub try6 Dim oSourceSheet as Object Dim oTargetSheet as Object Dim SourceRange As New com.sun.star.table.CellRangeAddress ' SourceRange with later Sheet1 like properties of what to copy ' Dim TargetRange As New com.sun.star.table.CellAddress ' TargetRange with later Sheet2 like properties of what to copy ' oSourceSheet = ThisComponent.Sheets.getByName("Sheet1") oTargetSheet = ThisComponent.Sheets.getByName("Sheet2") oSourceRange = oSourceSheet.getCellRangeByName("B2:D3") ' Specify the range to copy oTargetRange = oTargetSheet.getCellRangeByName("A1") ' Specify the header cell for pasting oTargetSheet.copyRange(TargetRange, SourceRange) ' Now nothing at all happens when the macro triggering button is pressed End Sub
问题原因
原代码错误地将单元格区域对象赋值给了CellRangeAddress/CellAddress类型的变量,而copyRange方法要求的参数是CellAddress(目标起始单元格地址)和CellRangeAddress(源区域地址),不是直接的单元格区域对象。
正确实现代码
Sub CopyRangeBlock Dim oDoc As Object Dim oSourceSheet As Object Dim oTargetSheet As Object Dim oSourceRangeAddr As com.sun.star.table.CellRangeAddress Dim oTargetCellAddr As com.sun.star.table.CellAddress ' 获取当前文档对象 oDoc = ThisComponent ' 定位源工作表和目标工作表 oSourceSheet = oDoc.Sheets.getByName("Sheet1") oTargetSheet = oDoc.Sheets.getByName("Sheet2") ' 获取源区域的CellRangeAddress对象 oSourceRangeAddr = oSourceSheet.getCellRangeByName("B2:D5").getRangeAddress() ' 获取目标起始单元格的CellAddress对象 oTargetCellAddr = oTargetSheet.getCellRangeByName("A1").getCellAddress() ' 执行块复制 oTargetSheet.copyRange(oTargetCellAddr, oSourceRangeAddr) End Sub
代码说明
getRangeAddress():从单元格区域对象中提取CellRangeAddress类型的地址信息,这是copyRange方法要求的源参数类型。getCellAddress():从目标单元格中提取CellAddress类型的地址信息,作为复制的起始位置。copyRange方法会自动匹配源区域的大小,将内容完整复制到目标起始位置开始的对应区域。
内容的提问来源于stack exchange,提问作者Micklos
相关产品推荐
相关产品推荐

