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 » So 24. Apr 2022, 14:44

Es geht um eine relativ umfangreiche Tabelle mit mehreren Blättern, die ich halbwegs regelmäßig überarbeite.
Um alte Versionen in die neue zu übertragen möchte ich das Makro nutzen, indem es aus der alten Datei die Werte in die neue Version kopiert.
Daher sind die Felder (so gut wie) immer an der selben Stelle, verteilt über mehrere Blätter, nur eben in einer anderen Datei.

Da mehrere Bekannte die Tabelle verwenden und ich sie auch mehrfach im Einsatz habe, ist eine neue Version bislang ein nerviger Akt. Das will ich ändern.
Gruß,
Xaiorn

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

Re: Calc-Makro Bastelhilfe

Beitrag von mikele » Di 26. Apr 2022, 20:23

Hallo,
du kannst natürlich auch eine andere Datei als Quelle nehmen (geklaut von hier: http://www.dannenhoefer.de/faqstarbasic ... ffnen.html)

Code: Alles auswählen

    
    url=convertToUrl("Pfad zu deiner Quelldatei")
    Dim myFileProp(0) as New com.sun.star.beans.PropertyValue
    myFileProp(0).name="Hidden"
    myFileProp(0).value=False 'für die praktische Arbeit kann später True gesetzt werden, um die Datei versteckt zu öffnen
    oQuellDocument = StarDesktop.loadComponentFromURL(url, "_blank", 0, myFileProp() )
    '...
    'Daten auslesen etc.
    '...
    oQuellDocument.close 
Gruß,
mikele

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

Re: Calc-Makro Bastelhilfe

Beitrag von Xaiorn » Di 26. Apr 2022, 21:23

Ich nehme an, "Daten auslesen etc..." meint das vorherige Makro? Das bleibt unverändert, abgesehen vom Namen des Blattes?
Gruß,
Xaiorn

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

Re: Calc-Makro Bastelhilfe

Beitrag von mikele » Mi 27. Apr 2022, 18:42

Hallo,
probier' es einfach mal an Kopien deiner Dateien aus.
Gruß,
mikele

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

Re: Calc-Makro Bastelhilfe

Beitrag von Xaiorn » Mi 27. Apr 2022, 20:37

Ich habe es eben ausprobiert und bekomme einen Fehler. Die folgende Zeile streikt:

Code: Alles auswählen

  oQuellDocument = StarDesktop.loadComponentFromURL(url, "_blank", 0, myFileProp() )
Ich habe es in der 1. Zeile sowohl mit dem Feld versucht (s.u.), so wie ich das gern hätte, als auch mit der Dateiadresse direkt.
Ich vermute, dass ich auch danach noch etwas falsch mache. Habe es wie folgt geändert:

Code: Alles auswählen

Sub Main


 url=convertToUrl("Tabelle1.FA8")'hier wird der Dateipfad ausgegeben mit 'file://D:/.../Dateiname.ods
    Dim myFileProp(0) as New com.sun.star.beans.PropertyValue
    myFileProp(0).name="Hidden"
    myFileProp(0).value=False 'für die praktische Arbeit kann später True gesetzt werden, um die Datei versteckt zu öffnen
    oQuellDocument = StarDesktop.loadComponentFromURL(url, "_blank", 0, myFileProp() )
     	aZellen=Array("EL3:EL51", "AE3:AE15", "AH1", "B17")
	oDoc=ThisComponent
	oZiel=oDoc.Sheets.getByName("Blattname")
	oQuelle=oDoc.Sheets.getByName(oZiel.getCellRangeByName("Blattname").String)
	For i=0 to ubound(aZellen)
		oZiel.getCellRangeByName(aZellen(i)).setDataArray(oQuelle.getCellRangeByName(aZellen(i)).getDataArray)
	Next
      oQuellDocument.close 
    
    End Sub
    
Gedacht ist, dass nur der Dateipfad in die Tabelle eingetragen wird, den Rest soll das Makro erledigen.

Danke schonmal für deine Hilfe.

Gruß, Xaiorn
Gruß,
Xaiorn

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

Re: Calc-Makro Bastelhilfe

Beitrag von mikele » Do 28. Apr 2022, 07:31

Hallo,
wenn der Dateiname und -pfad aus der Tabelle1, Zelle FA8 ausgelesen werden soll, dann musst du natürlich

Code: Alles auswählen

url=convertToUrl(ThisComponent.Sheets.geByName("Tabelle1").getCellRangeByName("FA8").String)

nutzen und später auch auf oQuellDocument zugreifen

Code: Alles auswählen

oQuelle=oQuellDocument.Sheets.getByName(oZiel.getCellRangeByName("Blattname").String)
Gruß,
mikele

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

Re: Calc-Makro Bastelhilfe

Beitrag von Xaiorn » Do 28. Apr 2022, 22:43

Hallo,
ja, wie gesagt habe ich sehr wenig Ahnung von OO-Makros...

Änderungen habe ich übernommen (Rechtschreibfehler beim 1. "get" gefunden und behoben) und komme wieder nur bis zu oben genannter Zeile mit folgendem Fehler:

Code: Alles auswählen

BASIC-Laufzeitfehler.
Es ist eine Exception aufgetreten
Type: com.sun.star.lang.IllegalArgumentException
Message: URL seems to be an unsupported one..
Die Adresse stimmt, da bin ich sehr sicher.
Sicherheitshalber hier noch einmal das geänderte Makro:

Code: Alles auswählen

Sub Main

 url=convertToUrl(ThisComponent.Sheets.getByName("Blatt1").getCellRangeByName("FA8").String)
    Dim myFileProp(0) as New com.sun.star.beans.PropertyValue
    myFileProp(0).name="Hidden"
    myFileProp(0).value=False
    oQuellDocument = StarDesktop.loadComponentFromURL(url, "_blank", 0, myFileProp() )
   	aZellen=Array("EL3:EL51", "AE3:AE15", "AH1", "B17")
	oDoc=ThisComponent
	oZiel=oDoc.Sheets.getByName("Blatt1")
	oQuelle=oQuellDocument.Sheets.getByName(oZiel.getCellRangeByName("Blatt1").String)
	For i=0 to ubound(aZellen)
		oZiel.getCellRangeByName(aZellen(i)).setDataArray(oQuelle.getCellRangeByName(aZellen(i)).getDataArray)
	Next
    oQuellDocument.close 
    
    End Sub
Gruß Xaiorn
Gruß,
Xaiorn

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

Re: Calc-Makro Bastelhilfe

Beitrag von mikele » Fr 29. Apr 2022, 11:54

Hallo,
was steht denn in Blatt1.FA8?
Gruß,
mikele

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

Re: Calc-Makro Bastelhilfe

Beitrag von Xaiorn » Fr 29. Apr 2022, 15:14

Der komplette Dateipfad, inkl. Anfangs- und Endapostroph also:

'file:///D:/..../Dateiname.ods'

...Und während ich es schreibe, fällt mir der Fehler auf. Ohne 'file:/// und ' am Ende klappt's.

ABER:
Jetzt bekomme ich in der Zeile

Code: Alles auswählen

oQuelle=oQuellDocument.Sheets.getByName(oZiel.getCellRangeByName("Blatt1").String)
folgende Fehlermeldung:

Code: Alles auswählen

BASIC-Laufzeitfehler.
Es ist eine Exception aufgetreten
Type: com.sun.star.uno.RuntimeException
Message: .
Daraus werde ich nicht schlau.
Gruß,
Xaiorn

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

Re: Calc-Makro Bastelhilfe

Beitrag von mikele » Fr 29. Apr 2022, 20:22

Hallo,
die Apostrophs waren der Fehler (die gehören da nicht hin). file:// stört hingegen nicht, würde aber den Anwender sicher verwirren.

Code: Alles auswählen

oZiel.getCellRangeByName("Blatt1").String
Was macht dieser Codeteil? Auf dem Tabellenblatt, dass der Variablen oZiel zugewiesen wurde, soll per .getCellRangeByName ein Zellbereich gewählt werden und dann dessen String ausgelesen werden. "Blatt1" ist aber kein gültiger Zellbereich und daher bricht das Makro mit Fehlermeldung ab.
Gruß,
mikele

Antworten