Замена ячеек местами

Автор W1nterdreams, 3 января 2021, 16:27

0 Пользователи и 1 гость просматривают эту тему.

W1nterdreams

Есть ли способ быстрой замены содержимого ячеек местами? Не рядом стоящих, а сильно разнесенных между собой

eeigor

Если вы используете Basic, то обмен значениями произведите с использованием временной переменной. Python позволяет это сделать зараз.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

W1nterdreams

Basic
А где можно поискать информацию, я никогда не сталкивался с макросами, пока очень сложно даётся... Причем смотрю на exel, хоть что то понятно в отличии от oo

rami

Опишите подробней, что вы хотите сделать.

W1nterdreams

В документе очень часто требуется поменять содержимое ячейки а1 на а500 например, между ними большое расстояние, хотелось бы выделить две и поменять

rami

Этот макрос поменяет местамо содержимое ячеек A1 и A500:
Sub Main
Dim oSheet, Cell1, Cell2, tempdata
oSheet = ThisComponent.Sheets(0)
Cell1 = oSheet.getCellRangeByName("A1")
Cell2 = oSheet.getCellRangeByName("A500")
tempdata = Cell1.String
Cell1.setString(Cell2.String)
Cell2.setString(tempdata)
End Sub

W1nterdreams

Я даже не знаю как оправдаться за то что остался не так понят, ведь имел я ввиду, что не только а1 на а500 буду менять, а такие ячейки, которые выберу произвольно...

rami

Тогда так (сначала выбрать две ячейки, затем выполнить макрос):
Sub Main
Dim oSel, Cell1, Cell2, tempdata
oSel = ThisComponent.CurrentSelection
Cell1 = oSel.getByIndex(0)
Cell2 = oSel.getByIndex(1)
tempdata = Cell1.String
Cell1.setString(Cell2.String)
Cell2.setString(tempdata)
End Sub

W1nterdreams


rami

Для общего случая (выбирать любые две ячейки):
Sub Main
Dim oSel, Cell1, Cell2, tempdata, oData
oSel = ThisComponent.CurrentSelection
If oSel.supportsService("com.sun.star.sheet.SheetCellRanges") Then
Cell1 = oSel.getByIndex(0)
Cell2 = oSel.getByIndex(1)
If Cell1.supportsService("com.sun.star.sheet.SheetCell") And Cell2.supportsService("com.sun.star.sheet.SheetCell") Then
tempdata = Cell1.String
Cell1.setString(Cell2.String)
Cell2.setString(tempdata)
End If
ElseIf oSel.supportsService("com.sun.star.sheet.SheetCellRange") Then
If oSel.Columns.Count>1 Then
oData = oSel.DataArray(0)
oSel.setDataArray(Array(Array(oData(1), oData(0))))
ElseIf oSel.Rows.Count>1 Then
oData = oSel.DataArray
oSel.setDataArray(Array(Array(oData(1)(0)), Array(oData(0)(0))))
End If
End If
End Sub

W1nterdreams