BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das OpenOffice Forum zu erhalten!

DANKE >><< DANKE

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des OpenOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als OO-SUPPORTER gekennzeichnet. 🤗

Calc-Makro Bastelhilfe

Alles zur Programmierung im OpenOffice.org
Xaiorn
Beiträge: 45
Registriert: Fr 22. Apr 2022, 19:17

Re: Calc-Makro Bastelhilfe

Beitrag von Xaiorn » Mo 9. Mai 2022, 19:32

Hallo,

das Makro hat zwar nicht mehr das Problem, dass Kommentare gelöscht werden, dafür endet es vorzeitig. Einzelne Felder verschiedener Arbeitsblätter werden ausgefüllt, aber dann schließt sich die Vorlage und das war's. Keines der Arbeitsblätter ist vollständig. Bis wohin das Makro kommt, kann ich nicht genau sagen, aber bestenfalls ~50 Felder weit.
Es endet ohne Fehlermeldung o.ä.
Gruß,
Xaiorn

mikele
Beiträge: 771
Registriert: Sa 23. Jul 2011, 22:09

Re: Calc-Makro Bastelhilfe

Beitrag von mikele » Di 10. Mai 2022, 08:42

Hallo,
mit folgendem, abgewandelten Makro habe ich einen Testlauf an deiner Import-Makro.ods durchgeführt:

Code: Alles auswählen

Sub Main2
	'Zugriff auf dieses Dokument
	oDoc=ThisComponent
	'Auslesen des Dateinamens für den Datenimport
	url=convertToUrl(oDoc.Sheets.getByName("Held").getCellRangeByName("FA9").String)
	'Öffnen der Quelldatei, versteckt
	Dim myFileProp(0) as New com.sun.star.beans.PropertyValue
	myFileProp(0).name="Hidden"
	myFileProp(0).value=true 'für die praktische Arbeit kann später True gesetzt werden, um die Datei versteckt zu öffnen
'	oQuellDocument = StarDesktop.loadComponentFromURL(url, "_blank", 0, myFileProp() )

		'Zugriff auf die Tabelle in Zieldatei 
		oZiel=oDoc.Sheets(k)
'		oQuelle=oQuellDocument.Sheets(k)
		obereiche=oZiel.getCellFormatRanges
		'Durchlauf durch alle Bereiche
		For i=0 to obereiche.count-1
			oBereich=obereiche.getbyindex(i)
			'Prüfen, ob Hintergrund gelb und nicht gesperrt
			if obereich.CellBackColor=16777113 and obereich.CellProtection.islocked=False then
				for spalte=obereich.RangeAddress.StartColumn to obereich.RangeAddress.EndColumn
					for zeile=obereich.RangeAddress.StartRow to obereich.RangeAddress.EndRow
						ozelle=oZiel.getCellByPosition(spalte,zeile)
						ozelle.string="!"
'						select case ozelle.type
'							Case com.sun.star.table.CellContentType.VALUE
'								ozelle.Value=oQuelle.getCellByPosition(spalte,zeile).Value
'							Case com.sun.star.table.CellContentType.TEXT
'								ozelle.String=oQuelle.getCellByPosition(spalte,zeile).String
'							Case com.sun.star.table.CellContentType.FORMULA
'								ozelle.Formula=oQuelle.getCellByPosition(spalte,zeile).Formula
'						end select
					next
				next
			end if
		Next
	Next
	'Schließen des Quelldokuments
'	oQuellDocument.close (false)
    
End Sub
Dabei wird in alle relevanten Zellen ein ! gesetzt. Das Makro benötigt bei mir für die 4 Tabellen schon ein paar Minuten.
aber dann schließt sich die Vorlage und das war's
Das bedeutet, Calc stürzt ab? Die Datei aus der die Daten importiert werden wird ja im Hintergrund (unsichtbar) geöffnet. Die Zieldatei wird durch das Makro nicht geschlossen.
Probiere ansonsten mal, die Zeile

Code: Alles auswählen

	'Durchlauf durch alle Tabellen
	For k=0 to oDoc.Sheets.Count-1
durch

Code: Alles auswählen

	'Durchlauf durch alle Tabellen
	For k=0 to 0
zu ersetzen, also nur das 1. Tabellenblatt zu bearbeiten. Was passiert?
Gruß,
mikele

Xaiorn
Beiträge: 45
Registriert: Fr 22. Apr 2022, 19:17

Re: Calc-Makro Bastelhilfe

Beitrag von Xaiorn » Di 10. Mai 2022, 17:49

Hallo,

das !-Makro klappt, aber nur auf dem 1. Blatt. In allen anderen passiert nichts.

Das Abändern auf nur Blatt 1 (

Code: Alles auswählen

For k=0 to 0
) beschränkt das vorherige Makro auf Blatt 1, aber trotzdem werden nicht alle Felder ausgefüllt.

Kann es sein, dass das Makro abbricht, wenn das Feld mit dem Dateipfad (FA9) geändert wird? Da dies variabel ist, ist es natürlich auch ungeschützt und gelb...
Die erste Version des Makros hat das allerdings nicht gestört.

Ja, die Zeit ist mir auch aufgefallen; die erste funktionierende Version (die die Kommentare überschreibt) läuft etwa 20 min, bis die ganze Datei fertig ist. Der erste Versuch, die Kommentare zu schützen lief etwa 3 min. Die beiden Variationen jetzt < 1 min.

Nein, die Tabelle stürzt nicht ab, hab ich wohl doof formuliert. Die Quelldatei schließt sich, wie sie es ja auch soll. Das hab ich als Endpunkt des Makros gesehen.
Zum Einen sehe ich ja, wenn die temporäre Datei im Ordner anzeigt, dass es im Hintergrund geöffnet ist, verschwindet, zum Anderen habe ich die Kommandozeile angepasst, dass die Quelldatei sichtbar geöffnet wird (ich will ja sehen, dass alles klappt).
Gruß,
Xaiorn

mikele
Beiträge: 771
Registriert: Sa 23. Jul 2011, 22:09

Re: Calc-Makro Bastelhilfe

Beitrag von mikele » Di 10. Mai 2022, 18:04

Hallo,
ja, da habe ich beim Kopieren irgendwie zwei Zeilen des Testmakros verschwinden lassen

Code: Alles auswählen

Sub Main2
	'Zugriff auf dieses Dokument
	oDoc=ThisComponent
	'Auslesen des Dateinamens für den Datenimport
	url=convertToUrl(oDoc.Sheets.getByName("Held").getCellRangeByName("FA9").String)
	'Öffnen der Quelldatei, versteckt
	Dim myFileProp(0) as New com.sun.star.beans.PropertyValue
	myFileProp(0).name="Hidden"
	myFileProp(0).value=true 'für die praktische Arbeit kann später True gesetzt werden, um die Datei versteckt zu öffnen
'	oQuellDocument = StarDesktop.loadComponentFromURL(url, "_blank", 0, myFileProp() )
	'Durchlauf durch alle Tabellen
	For k=0 to oDoc.Sheets.Count-1
		'Zugriff auf die Tabelle in Zieldatei 
		oZiel=oDoc.Sheets(k)
'		oQuelle=oQuellDocument.Sheets(k)
		obereiche=oZiel.getCellFormatRanges
		'Durchlauf durch alle Bereiche
		For i=0 to obereiche.count-1
			oBereich=obereiche.getbyindex(i)
			'Prüfen, ob Hintergrund gelb und nicht gesperrt
			if obereich.CellBackColor=16777113 and obereich.CellProtection.islocked=False then
				for spalte=obereich.RangeAddress.StartColumn to obereich.RangeAddress.EndColumn
					for zeile=obereich.RangeAddress.StartRow to obereich.RangeAddress.EndRow
						ozelle=oZiel.getCellByPosition(spalte,zeile)
						ozelle.string="!"
'						select case ozelle.type
'							Case com.sun.star.table.CellContentType.VALUE
'								ozelle.Value=oQuelle.getCellByPosition(spalte,zeile).Value
'							Case com.sun.star.table.CellContentType.TEXT
'								ozelle.String=oQuelle.getCellByPosition(spalte,zeile).String
'							Case com.sun.star.table.CellContentType.FORMULA
'								ozelle.Formula=oQuelle.getCellByPosition(spalte,zeile).Formula
'						end select
					next
				next
			end if
		Next
	Next
	'Schließen des Quelldokuments
'	oQuellDocument.close (false)
    
End Sub
Warum nicht alles ausdgefüllt wird bleibt ein Rätsel. Kannst du mal eine Beispieltabelle (Quelldatei - es reicht die erste Tabelle, die ja auch nicht übernommen wird) zum Testen hochladen?
Gruß,
mikele

mikele
Beiträge: 771
Registriert: Sa 23. Jul 2011, 22:09

Re: Calc-Makro Bastelhilfe

Beitrag von mikele » Di 10. Mai 2022, 18:48

Hallo,
so ein Quatsch, was bin ich dusselig:
Ich muss doch die Quellzellen testen und je nach deren Inhalt schreiben. Ansonsten bleibt eine leere Zelle halt leer :oops:

Code: Alles auswählen

Sub Main2
	'Zugriff auf dieses Dokument
	oDoc=ThisComponent
	'Auslesen des Dateinamens für den Datenimport
	url=convertToUrl(oDoc.Sheets.getByName("Held").getCellRangeByName("FA9").String)
	'Öffnen der Quelldatei, versteckt
	Dim myFileProp(0) as New com.sun.star.beans.PropertyValue
	myFileProp(0).name="Hidden"
	myFileProp(0).value=true 'für die praktische Arbeit kann später True gesetzt werden, um die Datei versteckt zu öffnen
	oQuellDocument = StarDesktop.loadComponentFromURL(url, "_blank", 0, myFileProp() )
	'Durchlauf durch alle Tabellen
	For k=0 to oDoc.Sheets.Count-1
		'Zugriff auf die Tabelle in Zieldatei 
		oZiel=oDoc.Sheets(k)
		oQuelle=oQuellDocument.Sheets(k)
		obereiche=oZiel.getCellFormatRanges
		'Durchlauf durch alle Bereiche
		For i=0 to obereiche.count-1
			oBereich=obereiche.getbyindex(i)
			'Prüfen, ob Hintergrund gelb und nicht gesperrt
			if obereich.CellBackColor=16777113 and obereich.CellProtection.islocked=False then
				for spalte=obereich.RangeAddress.StartColumn to obereich.RangeAddress.EndColumn
					for zeile=obereich.RangeAddress.StartRow to obereich.RangeAddress.EndRow
						oquellzelle=oQuelle.getCellByPosition(spalte,zeile)
						ozielzelle=oZiel.getCellByPosition(spalte,zeile)
						select case oquellzelle.type
							Case com.sun.star.table.CellContentType.VALUE
								ozielzelle.Value=oquellzelle.Value
							Case com.sun.star.table.CellContentType.TEXT
								ozielzelle.String=oquellzelle.String
							Case com.sun.star.table.CellContentType.FORMULA
								ozielzelle.Formula=oquellzelle.Formula
						end select
					next
				next
			end if
		Next
	Next
	'Schließen des Quelldokuments
	oQuellDocument.close (false)
    
End Sub
Gruß,
mikele

Xaiorn
Beiträge: 45
Registriert: Fr 22. Apr 2022, 19:17

Re: Calc-Makro Bastelhilfe

Beitrag von Xaiorn » Di 10. Mai 2022, 21:27

Hi,

ja, das ist klasse. Es läuft und das bedeutend viel schneller als das vorherige! Statt der rund 20 min braucht das Makro nur noch 2-3.

Ganz vielen Dank!
Gruß,
Xaiorn

Xaiorn
Beiträge: 45
Registriert: Fr 22. Apr 2022, 19:17

Re: Calc-Makro Bastelhilfe

Beitrag von Xaiorn » Di 19. Jul 2022, 16:23

Hallo (schon wieder),

nach einigen Praxistests habe ich doch noch eine (wahrscheinlich) Kleinigkeit:
Ganz am Ende, wenn der Import fertig ist, hätte ich gern ein Info-PopUp, das eben das sagt (also "Import abgeschlossen" oder sowas), da man das ansonsten doch recht leicht verpasst, wenn die Datei im Hintergrund geöffnet wird.
Hast du/habt ihr da eine entsprechende Erweiterung für mich?
Gruß,
Xaiorn

mikele
Beiträge: 771
Registriert: Sa 23. Jul 2011, 22:09

Re: Calc-Makro Bastelhilfe

Beitrag von mikele » Di 19. Jul 2022, 20:50

Hallo,
schau mal in der Hilfe unter Msgbox()...
Gruß,
mikele

craig
Beiträge: 318
Registriert: Sa 14. Mai 2016, 12:36

Re: Calc-Makro Bastelhilfe

Beitrag von craig » Di 19. Jul 2022, 21:00

Hallo,

eine Messagebox?

Dann ergänze wie folgt:

Code: Alles auswählen


'Schließen des Quelldokuments
oQuellDocument.close (false)

'*****************************************************************
	Msgbox "Die Hitze macht mich fix un' fätisch...:_)", 64, "Hitzewarnung!"
'*****************************************************************
End Sub
Siehe:
https://help.libreoffice.org/latest/de/ ... 10102.html
Gruß

Craig

Nie die Sicherungskopie vergessen!

═══════════════════════════════════════
WIN 10 Pro 64-Bit • AOO 4.1.8 • LO 7.4.5.1 (x64)

Xaiorn
Beiträge: 45
Registriert: Fr 22. Apr 2022, 19:17

Re: Calc-Makro Bastelhilfe

Beitrag von Xaiorn » Di 19. Jul 2022, 21:05

Danke euch und Craig, ich leide mit dir...
Gruß,
Xaiorn

Antworten