9

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

我怎么做?

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

谢谢杰斯珀。

4

5 回答 5

5

我意识到这个问题是前一段时间发布的,但现在,至少从 LibreOffice 4.2 开始,您可以通过 Alt+drag 来实现。我今天一直在寻找这个解决方案,在看到@wolfQueen 的回答后,我尝试了随机键组合,直到我发现了这个。

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

希望这可以帮助任何有同样问题的人!

于 2017-04-25T16:05:00.623 回答
0

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

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

于 2014-10-01T08:05:17.710 回答
0

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

学分:毛里西奥

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

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

信用纳夫沙

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

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

完整的帖子可以在这里找到

于 2019-11-09T07:13:14.603 回答
0

我也没有找到“万能钥匙”

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

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

于 2016-04-26T03:24:51.110 回答
0

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

于 2015-10-29T13:59:05.510 回答