Un-merged cells (Calc): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
Regel 53: Regel 53:
 
* <code>getRowSpan</code> en <code>getColumnSpan</code> zijn onderdelen van <code>com::sun::star::table.XMergeableCell</code> - En bedoeld voor Writer. <code>isMerged</code> zit in <code>com::sun::star::util::XMergeable</code> en werkt dus wél.
 
* <code>getRowSpan</code> en <code>getColumnSpan</code> zijn onderdelen van <code>com::sun::star::table.XMergeableCell</code> - En bedoeld voor Writer. <code>isMerged</code> zit in <code>com::sun::star::util::XMergeable</code> en werkt dus wél.
  
=== Oplossingen ===
+
=== Oplossing? ===
  
Gebruik <code>collapseToMergedArea</code>. Lees daarna de dimensies uit van dit gebied.
+
Maak onderscheid tussen ''cursor'' en ''cell'' - Belangrijk!
 +
 
 +
# Gebruik .ismerged om ''merged'' cellen te identificeren
 +
# Gebruik <code>collapseToMergedArea</code> om gebieden te identificeren van merged cells
 +
# Gebruik .merge(False) om dit ongedaan te maken [https://forum.openoffice.org/en/forum/viewtopic.php?f=5&t=74092]
 +
 
 +
Zie ook:
  
 
* https://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1sheet_1_1XSheetCellCursor.html#a8664ebd7274d467d7de9c98649244baf
 
* https://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1sheet_1_1XSheetCellCursor.html#a8664ebd7274d467d7de9c98649244baf

Versie van 6 nov 2019 14:31

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:

Bronnen

Algemeen

Probleem getRowSpan & getColumnSpan