Un-merged cells (Calc)

Uit De Vliegende Brigade
Ga naar: navigatie, zoeken

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 en getColumnSpan zijn onderdelen van com::sun::star::table.XMergeableCell - En bedoeld voor Writer. isMerged zit in com::sun::star::util::XMergeable en werkt dus wél.

Oplossing?

Maak onderscheid tussen cursor en cell - Belangrijk!

  1. Gebruik .ismerged om merged cellen te identificeren
  2. Gebruik collapseToMergedArea om gebieden te identificeren van merged cells
  3. Gebruik .merge(False) om dit ongedaan te maken [1]

Zie ook:

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

Probleem getRowSpan & getColumnSpan