как я могу сменить (несмежные) области в Calc

Я хотел бы иметь возможность обменивать 2 области (это могут быть соседние столбцы, но могут быть прямоугольниками любого размера).

So far I have reached this following: How can you extract the currently-selected range of cells in LibreOffice calc via pyuno? and https://forum.openoffice.org/en/forum/viewtopic.php?f=45&t=19528

У кого-то уже есть полезный макрос для этого или может помочь мне закончить мой? Или, если у кого-то есть лучшая идея интерфейса пользователя, пожалуйста.

Примечание: это более общее, чем Как поменять местами две ячейки в LibreOffice Calc </а>

sub Area_swapping

desktop = XSCRIPTCONTEXT.getDesktop()
model = desktop.getCurrentComponent()
try:
    sheets = model.getSheets()
except AttributeError:
    raise Exception("This script is for Calc Spreadsheets only")
#sheet = sheets.getByName('Sheet1')

# identify source content  

sheet = model.CurrentController.getActiveSheet()
oSelection_source = model.getCurrentSelection()
oArea_source = oSelection_source.getRangeAddress()
first_row_source = oArea_source.StartRow
last_row_source = oArea_source.EndRow
first_col_source = oArea_source.StartColumn
last_col_source = oArea_source.EndColumn

width_source  = last_row_source - ( first_row_source - 1 )
height_source = last_col_source - ( first_col_source - 1 )

# reserve source content (ie oTemp = oArea_source )

?? what is the object to keep?

# wait for selection of target area  

??

# compare dimensions and swap
if     ((width_source = width_target) and (height_source = height_target)) then

oArea_source = oArea_target
oArea_target = oTemp

elseIf ((width_source = height_target) and (height_source = width_target)) then
# or check to swap transposed
iAnswer = Msgbox("Yes or No?", 3 +32 +256, "Do you want to copy transposed?")
# 3 shows Yes, No and Cancel buttons, 32 a ?-icon, 256 focuses "No"
#REM execution continues if one of the 3 buttons have been pushed

If iAnswer = 6 then ' return value of "Yes"

  # transpose?? and copy

elseIf iAnswer = 7 then ' return value of "No"

  MsgBox "Source and Target dimensions do not match.\n Nothing was done."

 endif 

 else
    raise Exception("Source and Target dimensions do not match!")
 end if   

End Sub   

0
de