2017-02-03 1 views
1

Предположим, у меня есть это это Cells:Обратный порядок столбцов в Libre офисе известково

Initial Enteries

А потом по какой-то причине я хочу, чтобы автоматически изменить порядок столбцов, чтобы стать чем-то вроде этого:

enter image description here

любая помощь будет оценена!

+0

Как этот вопрос связан с программированием? Вставьте новый пустой столбец 'A' слева перед старым столбцом' A'. Вырезать/Вставить последний столбец 'D'. Теперь вырезаем/вставляем столбец 'B' в пустой столбец' D'. Удалите пустой столбец 'B'. –

+0

@AxelRichter Спасибо за ваш комментарий. Но я думаю, что есть недоразумение. Эти 3 столбца являются всего лишь примером. Я хочу сделать это для большого количества столбцов. Так что Cut и Paste не то, что я ищу. Вероятно, это может быть связано с программированием. – SirSaleh

+0

Итак, какой язык программирования должен использоваться? –

ответ

1

Итак, это подход с использованием Libreoffice Basic и API Libreoffice.

sub ReverseColumns() 

oThisWorkbook = ThisComponent 
oActiveSheet = oThisWorkbook.CurrentController.ActiveSheet 

oRow1 = oActiveSheet.getRows().getByIndex(0) 
aFilledCellsRow1 = oRow1.queryContentCells(1+2+4+16).getRangeAddresses() 

if ubound(aFilledCellsRow1) = -1 then exit sub 

lLastFilledColumnRow1 = aFilledCellsRow1(ubound(aFilledCellsRow1)).EndColumn 

c = 0 
for i = lLastFilledColumnRow1 to 1 step -1 
    oCellTargetColumn = oActiveSheet.getCellByPosition(c, 0) 
    oRangeAddressTargetColumn = oCellTargetColumn.RangeAddress 
    oActiveSheet.insertCells(oRangeAddressTargetColumn, com.sun.star.sheet.CellInsertMode.COLUMNS) 

    oCellTargetColumn = oActiveSheet.getCellByPosition(c, 0) 
    oCellAddressTargetColumn = oCellTargetColumn.CellAddress 

    oRangeSource = oActiveSheet.Columns.getByIndex(lLastFilledColumnRow1 + 1) 
    oRangeAddressSource = oRangeSource.RangeAddress 
    oActiveSheet.moveRange(oCellAddressTargetColumn, oRangeAddressSource) 
    c = c + 1 
next 

end sub 

Это первый определяет последний заполненный столбец в строке 1. Процесс обратного преобразования столбцов будет выполнен до этой колонки.

Для изучения макрокоманд в LibreOffice начать здесь: https://wiki.documentfoundation.org/Macros

+0

Я не знаю, где я делаю это неправильно, что этот макрос останавливается для меня «БАЗОВАЯ синтаксическая ошибка. Ожидается следующее: Sub.' – SirSaleh

+0

Это означает, что ключевое слово 'Sub' ожидается, но не найдено. Вы видели, как мой код начинается с 'sub ReverseColumns()' в первой строке? –

+0

Да! И я проверяю его в своем коде! У меня тоже есть, Но ошибка существует. – SirSaleh

0

В случае, если кто здесь хочет изменить порядок строк (вместо столбцов) ... Я взял код макроса posted by @Axel-Richter и редактировал его, так это делает именно это:

sub ReverseRows() 

    oThisWorkbook = ThisComponent 
    oActiveSheet = oThisWorkbook.CurrentController.ActiveSheet 

    oColumn1 = oActiveSheet.getColumns().getByIndex(0) 
    aFilledCellsColumn1 = oColumn1.queryContentCells(1+2+4+16).getRangeAddresses() 

    if ubound(aFilledCellsColumn1) = -1 then exit sub 

    lLastFilledRowColumn1 = aFilledCellsColumn1(ubound(aFilledCellsColumn1)).EndRow 

    c = 0 

    for i = lLastFilledRowColumn1 to 1 step -1 
    oCellTargetRow = oActiveSheet.getCellByPosition(0, c) 
    oRangeAddressTargetRow = oCellTargetRow.RangeAddress 
    oActiveSheet.insertCells(oRangeAddressTargetRow, com.sun.star.sheet.CellInsertMode.ROWS) 

    oCellTargetRow = oActiveSheet.getCellByPosition(0, c) 
    oCellAddressTargetRow = oCellTargetRow.CellAddress 

    oRangeSource = oActiveSheet.Rows.getByIndex(lLastFilledRowColumn1 + 1) 
    oRangeAddressSource = oRangeSource.RangeAddress 
    oActiveSheet.moveRange(oCellAddressTargetRow, oRangeAddressSource) 
    c = c + 1 
    next 

end sub 
Смежные вопросы