Makro (CALC) ein bestimmtes Wort finden und komplette Zeile kopieren

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Namrenner
*
Beiträge: 12
Registriert: Mo, 04.08.2014 12:28

Makro (CALC) ein bestimmtes Wort finden und komplette Zeile kopieren

Beitrag von Namrenner »

Hallo,
suche ein Code für: mit Makro ein bestimmtes Wort (BSP: "Brief") findet und komplette Zeile kopiert und eine neue Tabelle ("Brief") erstellt und dort einfügt.
Danke in voraus für eure Hilfe.
Zuletzt geändert von Namrenner am Mi, 08.07.2015 13:38, insgesamt 1-mal geändert.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: mit Makro ein bestimmtes Wort finden und komplette Zeile kopieren

Beitrag von komma4 »

Willkommen im Forum.

Du findest hier eine Gemeinschaft, die Dir bei Problemen hilft - aber selten als kostenloser Coding-Service arbeitet.

Wenn Du Dich etwas im Unterforum einliesst, dann findest Du schnell Hinweise, wie Du Programmieren erlernen kannst. Viel Spass dabei.
Bei dann auftauchenden konkreten Fragen helfen wir Dir gerne weiter... wenn Du die nötigen Informationen lieferst (handelt es sich bei Deinem Beispiel um ein CALC-Dokument?)
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Namrenner
*
Beiträge: 12
Registriert: Mo, 04.08.2014 12:28

Re: Makro (CALC) ein bestimmtes Wort finden und komplette Zeile kopieren

Beitrag von Namrenner »

Hallo,
ja "CALC"
Namrenner
*
Beiträge: 12
Registriert: Mo, 04.08.2014 12:28

Re: Makro (CALC) ein bestimmtes Wort finden und komplette Zeile kopieren

Beitrag von Namrenner »

Hallo,

habe schon öfters probiert, da leider Calc nicht den Makro aufnehmt, finde ich leider nicht richtigen Code dafür.

Habe Code hinbekommen, wo ein bestimmtes Wort findet und die Zeile löscht,

Code: Alles auswählen

dim args1(17) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SearchItem.StyleFamily"
args1(0).Value = 2
args1(1).Name = "SearchItem.CellType"
args1(1).Value = 0
args1(2).Name = "SearchItem.RowDirection"
args1(2).Value = true
args1(3).Name = "SearchItem.AllTables"
args1(3).Value = false
args1(4).Name = "SearchItem.Backward"
args1(4).Value = true
args1(5).Name = "SearchItem.Pattern"
args1(5).Value = false
args1(6).Name = "SearchItem.Content"
args1(6).Value = false
args1(7).Name = "SearchItem.AsianOptions"
args1(7).Value = false
args1(8).Name = "SearchItem.AlgorithmType"
args1(8).Value = 0
args1(9).Name = "SearchItem.SearchFlags"
args1(9).Value = 65536
args1(10).Name = "SearchItem.SearchString"
args1(10).Value = "Test"
args1(11).Name = "SearchItem.ReplaceString"
args1(11).Value = ""
args1(12).Name = "SearchItem.Locale"
args1(12).Value = 255
args1(13).Name = "SearchItem.ChangedChars"
args1(13).Value = 2
args1(14).Name = "SearchItem.DeletedChars"
args1(14).Value = 2
args1(15).Name = "SearchItem.InsertedChars"
args1(15).Value = 2
args1(16).Name = "SearchItem.TransliterateFlags"
args1(16).Value = 1280
args1(17).Name = "SearchItem.Command"
args1(17).Value = 1

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Flags"
args2(0).Value = "R"

dispatcher.executeDispatch(document, ".uno:DeleteCell", "", 0, args2())
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Makro (CALC) ein bestimmtes Wort finden und komplette Zeile kopieren

Beitrag von clag »

Hallo Namrenner,

habe dir mal ein Makro und eine BeiSpieldatei erstellt die deinen Wunsch und etwas mehr erfüllt,
guckst du hier:

Code: Alles auswählen

sub FindeStringKopiereFundzeile
oCalc = ThisComponent
oSheet = oCalc.CurrentSelection.Spreadsheet 
	myString = InputBox( _
	"bei Fund, eine weitere so benannte Tabelle erstellen " & chr(10) & _
	"und in Diese, dann die gesamte Fundzeile kopieren" & chr(10) & _
	"es können auch mehrere Suchbegriffe ';' getrennt eingegeben werden" _
	,"den eingegebenen Begiff suchen ")
		if Len(myString) = 0  then
			MsgBox("nichts eingegeben Aktion abgebrochen")
			exit sub
		end if
	mAllText = split(myString,";")
	for i=0 to uBound(mAllText)
	result = SucheNach( mAllText(i))
		if result = "-"  then
			mAllText(i) = mAllText(i) & " - nicht gefunden, keine weitere Aktion" 
			goto jumpover
		else
			ix=1 
			newTable = mAllText(i)
			do while oCalc.Sheets.hasByName(newTable) 
				ix = ix+1
				newTable = mAllText(i) & "(" & ix &")"
				if oCalc.Sheets.count > 255 then 
					msgbox "zu viele Tabellenblätter"
					exit sub
				endif
			loop
			Sheet=oCalc.createInstance("com.sun.star.sheet.Spreadsheet")
			oCalc.Sheets.insertByName(newTable, sheet)
		endif
	oSheet2 = oCalc.Sheets.getByName(newTable)
	oSourceRange = oSheet.getCellRangeByPosition(0,result,1023,result)
	oSourceRangeAddresse = oSourceRange.getRangeAddress
	oTarget = oSheet2.getCellByPosition(0,1)
	oTargetCellAdresse = oTarget.getCellAddress
	oSheet2.copyRange(oTargetCellAdresse,oSourceRangeAddresse)
	mAllText(i) = "Tabelle " & newTable & " erstellt und Zeile " & result+1 & " kopiert "
	jumpover:
	next 
	msgbox join(mAllText(), chr(10)) 
end sub 

und noch etws aufgezeichneten Dispatcher Code zu einer "function" erweitert

Code: Alles auswählen

function SucheNach( sText$ )

rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Sel"
args1(0).Value = false
dispatcher.executeDispatch(document, ".uno:GoToStart", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(17) as new com.sun.star.beans.PropertyValue
args2(0).Name = "SearchItem.StyleFamily"
args2(0).Value = 2
args2(1).Name = "SearchItem.CellType"
args2(1).Value = 0
args2(2).Name = "SearchItem.RowDirection"
args2(2).Value = false
args2(3).Name = "SearchItem.AllTables"
args2(3).Value = false
args2(4).Name = "SearchItem.Backward"
args2(4).Value = false
args2(5).Name = "SearchItem.Pattern"
args2(5).Value = false
args2(6).Name = "SearchItem.Content"
args2(6).Value = false
args2(7).Name = "SearchItem.AsianOptions"
args2(7).Value = false
args2(8).Name = "SearchItem.AlgorithmType"
args2(8).Value = 1
args2(9).Name = "SearchItem.SearchFlags"
args2(9).Value = 65536
args2(10).Name = "SearchItem.SearchString"
args2(10).Value = "^" & sText & "$"
args2(11).Name = "SearchItem.ReplaceString"
args2(11).Value = ""
args2(12).Name = "SearchItem.Locale"
args2(12).Value = 255
args2(13).Name = "SearchItem.ChangedChars"
args2(13).Value = 2
args2(14).Name = "SearchItem.DeletedChars"
args2(14).Value = 2
args2(15).Name = "SearchItem.InsertedChars"
args2(15).Value = 2
args2(16).Name = "SearchItem.TransliterateFlags"
args2(16).Value = 1024
args2(17).Name = "SearchItem.Command"
args2(17).Value = 0
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args2())

	if ThisComponent.CurrentSelection.String = sText then
		SucheNach = ThisComponent.CurrentSelection.CellAddress.Row
	else
		SucheNach = "-"
	endif		

end function

findeText_kopiereZeile.ods
(19.79 KiB) 388-mal heruntergeladen
vieleicht kannst du es ja so direkt gebrauchen?

VielSpaß
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Namrenner
*
Beiträge: 12
Registriert: Mo, 04.08.2014 12:28

Re: Makro (CALC) ein bestimmtes Wort finden und komplette Zeile kopieren

Beitrag von Namrenner »

Hallo Clag,

danke für die tolle Arbeit.
Können Sie den Befehl ändern?
Wenn was gesucht wird, wenn mehrmals in der Tabelle ist, kopiert?
BSP: habe in der Zeile 2, 5 und 7 "Deutschland" stehen, das die 3 Zeilen in die neue Tabelle kopiert.
Wenn möglich ohne MsgBox, danke.
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Makro (CALC) ein bestimmtes Wort finden und komplette Zeile kopieren

Beitrag von clag »

Hallo Namrenner,

habe das Makro noch etwas "gepimpt"
es werden jetzt alle Zeilen kopiert, mit oder ohne Kopfzeile, alle oder nur in der Auswahl.
findeText_kopiere_alle_Zeilen.ods
(31.87 KiB) 448-mal heruntergeladen
Viel Spaß.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Namrenner
*
Beiträge: 12
Registriert: Mo, 04.08.2014 12:28

Re: Makro (CALC) ein bestimmtes Wort finden und komplette Zeile kopieren

Beitrag von Namrenner »

Hallo,
danke klappt super.
Können Sie mir auch nur den Code geben, ohne msgbox, meine damit das ohne eine Suchbox bekomme.
Bekommen jeden Tag eine csv Datei mit Daten mit Adressen, Versandarten (Briefpost, Paket...)
Nun will den Code von Ihnen nehmen, das die Adressen sortiert wird.
Tabelle Briefpost, Tabelle Paket.
Mit Spaltenkopf.

Danke
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Makro (CALC) ein bestimmtes Wort finden und komplette Zeile kopieren

Beitrag von clag »

Hallo Namrenner,
Namrenner hat geschrieben:meine damit das ohne eine Suchbox bekomme
und woher soll das Makro dann wissen nach welchem "Begriff" gesucht werden soll?

Du solltest einmal etwas präziser mitteilen was du genau möchtest.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Namrenner
*
Beiträge: 12
Registriert: Mo, 04.08.2014 12:28

Re: Makro (CALC) ein bestimmtes Wort finden und komplette Zeile kopieren

Beitrag von Namrenner »

Hallo,
BSP: Paket und die Tabelle heist dann auch Paket mit Spaltenkopf.
ich ändere den Code mit andere Suchbegriff um, danke.

mfg
Namrenner
*
Beiträge: 12
Registriert: Mo, 04.08.2014 12:28

Re: Makro (CALC) ein bestimmtes Wort finden und komplette Zeile kopieren

Beitrag von Namrenner »

Hallo,
schade das keine Antwort mehr bekommen, der Code ist seht gut.
Da ich immer den selben Suchbegriff habe, ist es mit MsgBox nicht so einfach.
Kann jemand den Code umschreiben ohne MsgBox, das gesuchte Wort ist immer "Deutschland".
Habe Adressen von Ausland und Deutschland, suche nur ein Code mit gewünschte Suchfeld "Deutschland".
Ich Danke im Voraus, das jemand mir den Code gibt, Danke.
Gesperrt