【问题标题】:How to swap two cells in LibreOffice Calc如何在 LibreOffice Calc 中交换两个单元格
【发布时间】:2014-09-29 05:31:25
【问题描述】:

我希望能够在 LibreOffice Calc 中选择两个单元格,然后按某种魔法键,结果交换两个单元格的内容。

我该怎么做?

我为 Excel 找到了这个解决方案,但它在 LibreOffice 中不起作用: https://superuser.com/questions/257516/swap-cell-contents-in-excel

谢谢 杰斯珀。

【问题讨论】:

  • 单击列,在高亮区域单击并按住鼠标左键,开始拖动,在释放鼠标按钮之前单击Alt按钮

标签: libreoffice-calc


【解决方案1】:

我知道这个问题是不久前发布的,但现在,至少从 LibreOffice 4.2 开始,您可以通过 Alt+拖动来实现此目的。我今天正在寻找这个解决方案,在看到@wolfQueen 的回答后,我尝试了随机组合键,直到我发现了这个。

根据您的系统,这可能是一个绑定操作。在我的操作系统和桌面环境(Ubuntu 16.04,XFCE)Alt+drag是一个窗口移动动作,所以我必须开始拖动单元格,然后按Alt 防止窗口管理器窃取节目。

希望这对有同样问题的人有所帮助!

【讨论】:

  • 它只是在向下移动单元格时复制和粘贴。它不会交换单元格。
【解决方案2】:

这可能不是一个简单的解决方案,但您可以编写一个宏来读取所选单元格的值并切换它们。然后,您可以将宏链接到工作表上的按钮或添加到 LibreOffice 工具栏中的按钮(如果您想将其用于多个文档)。

这个答案可以帮助你做到这一点: LibreOffice Calc: Access a user selected range in a macro

【讨论】:

    【解决方案3】:

    我认为答案不正确。如果您从与函数相同的工作表中调用宏,则无法通过宏执行此操作,因为函数无法更改调用工作表中的任何单元格。

    【讨论】:

      【解决方案4】:

      我也没有找到“魔法钥匙”。

      但作为解决方法,我所做的是通过单击最左侧的行号来选择该行,然后按Alt + Ctrl, 然后将其移动/拖动到要交换它的行的顶部或底部。它实际上只是复制了该行,但是您可以从其原始位置删除/删除该行。它最终会像你交换它一样。

      希望对您有所帮助,如有任何问题或建议,请发表评论

      【讨论】:

        【解决方案5】:

        您可以使用两个宏来交换单元格

        信用:Mauricio

        Sub swap_values()
        
        doc = ThisComponent
        sel = doc.CurrentSelection
        
        If sel(0).ImplementationName = "ScCellObj" Then
            c1 = sel(0)
            c2 = sel(1)
        Else
            If sel(0).Columns.Count = 2 Then
                c1 = sel(0).getCellByPosition(0,0)
                c2 = sel(0).getCellByPosition(1,0)
            Else
                c1 = sel(0).getCellByPosition(0,0)
                c2 = sel(0).getCellByPosition(0,1)      
            End If
        End If
        
        tmp = c1.String
        c1.String = c2.String
        c2.String = tmp
        
        End Sub
        

        我写了另一个宏,它使用了不同的方法。

        信用Navshah

        Sub Swap()
        
        Dim selection as Object
        selection = ThisComponent.getCurrentSelection()
        
        cell1Address = ThisComponent.createInstance("com.sun.star.table.CellRangeAddressConversion")
        cell2Address = ThisComponent.createInstance("com.sun.star.table.CellRangeAddressConversion")
        
        cell1Address.Address = selection(0).getRangeAddress 
        cell2Address.Address = selection(1).getRangeAddress
        
        cell1 = cell1Address.UserInterfaceRepresentation
        cell2 = cell2Address.UserInterfaceRepresentation
        
        REM if the cells are in contagious single range
        If selection.supportsService("com.sun.star.sheet.SheetCellRange") Then
        
            arr = Split(cell1, ":")
            cell1 = arr(0)
            cell2 = arr(1)
        
        End If
        
        
        REM // Get the cell references to write values
        
        cellA = ThisComponent.Sheets(0).getCellRangebyName(cell1)
        cellB = ThisComponent.Sheets(0).getCellRangebyName(cell2)
        
        REM // Store CellA values temporarily in a string variable 't'
        
        Dim t as String
        t = cellA.String
        
        cellA.String = cellB.String
        cellB.String = t
        
        
        
        End Sub
        

        保存上述任何宏并为其分配快捷方式。

        完整的帖子可以在here找到

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-13
          • 1970-01-01
          相关资源
          最近更新 更多