[SOLVED] Makro usuwania niepotrzebnych wierszy

Użytkowanie arkusza kalkulacyjnego
kejm
Posty: 3
Rejestracja: pt gru 30, 2016 7:46 pm

[SOLVED] Makro usuwania niepotrzebnych wierszy

Post autor: kejm »

Witam,
Czy znajdzie się osoba, która pomoże mi napisać klika makr do LibreOffice Calc?
Mam do zedytowania sporo arkuszy, a w każdym bardzo dużo wierszy, kilka kolumn. Mogę nawiązać z kimś współpracę.
Pierwsze makro jakie potrzebuję, ma usuwać wiersze gdzie w jednej z kolumn (określonej) są konkretne dane (a, b, c, ...– ilość tych danych ograniczona; dane wpisane w makro).
Ostatnio zmieniony czw lut 02, 2017 5:04 pm przez kejm, łącznie zmieniany 1 raz.
LibreOffice 5.0
kejm
Posty: 3
Rejestracja: pt gru 30, 2016 7:46 pm

Re: Makro usuwania niepotrzebnych wierszy

Post autor: kejm »

Witajcie
Napisałem makro, którego potrzebowałem i postanowiłem je tu umieścić. Może komuś przyda się do własnych zastosowań.
Poniższe makro usuwa wiersze, w których, w wybranej kolumnie znajdzie 1 z 3 różnych ciągów znaków (przykładowe: abc, 123, cde). Ciągi jako całość zawartości komórki. Makro kończy się, gdy trafi na pierwszą pustą komórkę.
Niewiele jest literatury Basica w języku polskim, także cokolwiek może być przydatne. To co zauważyłem w działaniu makr na dużej ilości danych to to, że standardowe przekształcenia na danych w arkuszu odbywają się szybciej, niż czas działania makra, jednak przy powtórzeniach dla wielu arkuszy można międzyczasie zajmować się czymś innym.

Kod: Zaznacz cały

Sub usuwanie_wierszy
Dim Cell As Object
Dim wiersz As Long, puste_wiersze As Integer
Dim n As String

let wiersz = 1
let puste_wiersze = 0

	Do until puste_wiersze = 1		
		
		let Cell = ThisComponent.Sheets(0).getCellByPosition(kolumna,wiersz)
		let n = Cell.string	
											
			If n = "abc" Then
				ThisComponent.Sheets(0).Rows.removeByIndex(wiersz, 1)
				let wiersz = wiersz - 1								
			Else										
				If n = "123" Then
					ThisComponent.Sheets(0).Rows.removeByIndex(wiersz, 1)	
					let wiersz = wiersz - 1												
				Else					
					If n = "cde" Then
						ThisComponent.Sheets(0).Rows.removeByIndex(wiersz, 1)
						let wiersz = wiersz - 1												
					Else						
					End If
				End If
			End If		
														
			If n = "" Then				
				let puste_wiersze = puste_wiersze + 1					
			Else
				let puste_wiersze = 0
			End If			
		
		let wiersz = wiersz + 1		
		
	Loop				
End Sub
Ostatnio zmieniony wt sty 31, 2017 10:31 pm przez Jan_J, łącznie zmieniany 1 raz.
Powód: znaczniki [code]
LibreOffice 5.0
krystianhapa2
Posty: 1
Rejestracja: czw lut 02, 2017 1:08 pm

Re: Makro usuwania niepotrzebnych wierszy

Post autor: krystianhapa2 »

Szukałem czegoś podobnego, trochę musiałem przerobić, ale przynajmniej szkielet był, także dzięki. A co do dokumentacji, raczej do większości struktur czy języków będzie po angielsku, bez niego raczej się nie obejdzie w programowaniu.
kejm
Posty: 3
Rejestracja: pt gru 30, 2016 7:46 pm

Re: [SOLVED] Makro usuwania niepotrzebnych wierszy

Post autor: kejm »

Właśnie tak, jeśli chodzi o dokumentację to poza niewielkimi fragmentami i kilkoma podstronami help.libreoffice.org/Basic/... w języku polskim, najlepsza przydatna literatura całościowa jaką znalazłem to LibreOffice Basic Programmer's Guide i OpenOffice Macros Explained by Andrew Pitonyak.
W tym kodzie, który tu umieściłem jest mały błąd. Tam gdzie jest "kolumna", trzeba wpisać numer kolumny, albo zadeklarować zmienną na początku, tak jak wiersz.
LibreOffice 5.0
ODPOWIEDZ