Un-merged cells (Calc)
Het kan altijd nog gekker: Ik wil een rekenblad importeren, maar om tikwerk te besparen, hebben mensen cellen gemerged. Als ik kopiëer-en-plak zonder opmaak, gaat de inhoud van die merged cell naar de eerste cel. De overige cellen zijn leeg - en niet meer gemerged. Daarnaast kunnen merged cellen gevolgd worden door lege cellen. Graag wil ik dit splitten of unmergen automatiseren, ivm. fouten en veel werk.
Bereik merged cells achterhalen
Detecteren van merged cells is niet zo moeilijk. Maar hoe achterhaal ik nu hoe groot dat merged area is?
Probleem
Dit werkt niet:
o_cursor = ThisComponent.Sheets(0).createCursor() o_cursor.gotoEndOfUsedArea(false) i_rows = o_cursor.getRangeAddress().EndRow+1 i_columns = o_cursor.getRangeAddress().EndColumn+1 ''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Iterate through all columns ''''''''''''''''''''''''''''''''''''''''''''''''''''' for column_counter=0 to i_columns ''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Iterate through all rows ''''''''''''''''''''''''''''''''''''''''''''''''''''' ' for row_counter=0 to i_rows ''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Check if cell is merged ''''''''''''''''''''''''''''''''''''''''''''''''''''' ' if ThisComponent.sheets(0).getCellByPosition(column_counter, row_counter).isMerged then ' Cell is merged! Now get the range ''''''''''''''''''''''''''''''''''' ' ' FOUTMELDING ' ' row_range = ThisComponent.sheets(0).getCellByPosition(column_counter, row_counter).getRowSpan # FOUTMELDING ' column_range = ThisComponent.sheets(0).getCellByPosition(column_counter, row_counter).getColumnSpan # FOUTMELDING end if next next
Mogelijke oorzaken
getRowSpan
engetColumnSpan
zijn onderdelen vancom::sun::star::table.XMergeableCell
- En bedoeld voor Writer.isMerged
zit incom::sun::star::util::XMergeable
en werkt dus wél.
Oplossing?
Maak onderscheid tussen cursor en cell - Belangrijk!
- Gebruik .ismerged om merged cellen te identificeren
- Gebruik
collapseToMergedArea
om gebieden te identificeren van merged cells - Gebruik .merge(False) om dit ongedaan te maken [1]
Zie ook:
- https://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1sheet_1_1XSheetCellCursor.html#a8664ebd7274d467d7de9c98649244baf
- https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=80528
- https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=96635
- https://forum.openoffice.org/en/forum/viewtopic.php?f=45&t=24234
Unmerge twee cellen - Begin
Het begin is er:
sub test_03() my_cell_range = ThisComponent.sheets(0).getCellRangeByPosition(0,0,0,1) my_cell_range.merge(False) end sub
Dit werkt hetzelfde als wanneer je het handmatig doet. De waarde wordt verhuisd naar (0,0) en (0,1) is leeg.
Bronnen
Algemeen
- https://forum.openoffice.org/en/forum/viewtopic.php?f=9&t=29848 - Komt een heel eind, maar handmatig, en houdt niet rekening met de situatie dat een merged cell gevolgd wordt door een lege cel
- https://forum.openoffice.org/en/forum/viewtopic.php?f=5&t=74092 - Warm!
- https://www.openoffice.org/api/docs/common/ref/com/sun/star/table/XMergeableCellRange.html
- https://www.openoffice.org/api/docs/common/ref/com/sun/star/table/Cell.html
- https://forum.openoffice.org/en/forum/viewtopic.php?f=45&t=24234&hilit=merged+area
- https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=80528 - Heel interessant!
Probleem getRowSpan & getColumnSpan