2017-02-03 10 views
1

は、私がこれにこの細胞があるとします。リバース列の順序リブレオフィスカルクで

Initial Enteries

そして、私はこのようなものになるように自動的に列の順序を逆にしたい何らかの理由:

enter image description here

ご了承ください。

+0

プログラミングに関するこの質問はどうですか?古い列Aの前に新しい空の列Aを挿入します。最後の列「D」をカット/ペーストします。今すぐ空の列 'D'に列' B'をカット/ペーストします。空の列 'B'を削除します。 –

+0

@AxelRichterコメントありがとうございました。しかし、私は誤解があると思う。この3列は単なる例です。私は多数の列に対してこれを実行したい。カットとペーストは私が探しているものではありません。これはおそらくプログラミングによるものです。 – SirSaleh

+0

どのようなプログラミング言語を使用するのですか? –

答えて

1

ここでは、Libreoffice BasicとLibreoffice APIを使用する方法を示します。

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

私はどこでこのマクロが私のために停止するか間違っているのか分からない 'BASIC構文エラー。期待値: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