[gelöst] mit writer-makro ein sheet auslesen ?

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: [gelöst] mit writer-makro ein sheet auslesen ?

Re: mit writer-makro ein sheet auslesen ?

von sven-my » Mo, 20.08.2012 21:31

Hallo Stephan,

Deine Hilfe hat mein Projekt zu einem guten Abschluß gebracht.
Dies ist Dein, von mir, umgefrikkelter code:

Code: Alles auswählen

rem ---------------------------------------------
sub calc_auslesen
dim aAdr(24)
dim Db as string
Db = "leer"

oDoc = ThisComponent
If oDoc.hasLocation() then exit Sub

rem --- Daten lesen ---
Adb = "Adressen.ods"
laenge = Len(Adb)
alles = StarDesktop.getComponents()
elemente = alles.createEnumeration()
Do While elemente.HasMoreElements
aktuell = elemente.NextElement()
	If HasUnoInterfaces( aktuell, "com.sun.star.frame.XModel" ) Then
		If aktuell.hasLocation() Then
			if Right(ConvertFromURL(aktuell.GetLocation),laenge) = Adb Then
				blatt = aktuell.getSheets().GetByName("Ergebnis")
				Db = blatt.getCellByPosition(0,0).string
				msgbox "bitte Adresse auswählen"
						while GE <> "neu"
						GE = blatt.getCellByPosition(1,26).string
						wend
					for i = 0 to 24
						aAdr(i) = blatt.getCellByPosition(1,i).string
					next i
					   	blatt.getCellByPosition(1,26).string = "gelesen"
			end if
		end if
	end if
Loop

if Db = "leer" then 
msgbox "Datenbank nicht geöffnet"
oeffnen.DocOeffnen()
exit sub
end if

rem --- bookmark schreiben ---
oDoc = thisComponent
oBM = oDoc.getBookmarks().getByName("Empfänger_Alles")
oBM.getAnchor().String = aAdr(24)
oBM = oDoc.getBookmarks().getByName("AnredeText")
oBM.getAnchor().String = aAdr(12)
oBM = oDoc.getBookmarks().getByName("Anmerkung1")
oBM.getAnchor().String = aAdr(13)
oBM = oDoc.getBookmarks().getByName("Feld1")		'Speichername
oBM.getAnchor().String = aAdr(14)
oBM = oDoc.getBookmarks().getByName("Feld3")		'Kdn-Nr.
oBM.getAnchor().String = aAdr(16)
oBM = oDoc.getBookmarks().getByName("Feld4")		'm. Brief vom
oBM.getAnchor().String = aAdr(17)
oBM = oDoc.getBookmarks().getByName("Feld7")		'+ Ihr Zeichen
oBM.getAnchor().String = aAdr(20)
oBM = oDoc.getBookmarks().getByName("Feld8")		'+ Betreff1
oBM.getAnchor().String = aAdr(21)
oBM = oDoc.getBookmarks().getByName("Fax")
oBM.getAnchor().String = aAdr(22)
oBM = oDoc.getBookmarks().getByName("eMail")
oBM.getAnchor().String = aAdr(23)
oBM = oDoc.getBookmarks().getByName("Name")
oBM.getAnchor().String = aAdr(0)
oBM = oDoc.getBookmarks().getByName("Zusatz")
oBM.getAnchor().String = aAdr(6)

wait 500
bereinigen.bereinigen()

end sub
den hier habe zum öffnen des calc-Doc:

Code: Alles auswählen

sub DocOeffnen
dim Pfad as String
dim Dummy()
dim Url as String
dim Calc as Object
dim LW as string

lw = mid(CurDir,1,2)
Pfad = lw & "\OpenOffice\Datenbanken\Adressen.ods"
Url = ConvertToUrl(Pfad)
Dim myFileProp(1) as New com.sun.star.beans.PropertyValue
myFileProp(0).Name  = "MacroExecutionMode"
myFileProp(0).Value = 4
Calc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, myFileProp())

end sub
gruß
sven-my

Re: mit writer-makro ein sheet auslesen ?

von sven-my » So, 19.08.2012 23:51

Hallo Stephan,

ich benötige doch nochmal Deine Hilfe.

Wenn das Dokument, aus dem ich die Daten haben will, noch nicht geöffnet ist, wollte ich es so öffnen, klappt auch, aber die Abfrage >hasLocation()< ist in diesem Fall doch unnötig.
Da ich Deinen code auch nicht so richtig verstanden habe, ist die Zuweisung a=a auch nur eine Krücke.

Code: Alles auswählen

sub Doc_öffnen
Adb = "Adressen.ods"
laenge = Len(Adb)
alles = StarDesktop.getComponents()
elemente = alles.createEnumeration()
Do While elemente.HasMoreElements
   aktuell = elemente.NextElement()
   If HasUnoInterfaces( aktuell, "com.sun.star.frame.XModel" ) Then
		If aktuell.hasLocation() Then
			a=a
		else	  
			Pfad = "E:\OpenOffice\Datenbanken\Adressen.ods"
			Url = ConvertToUrl(Pfad)
			Dim myFileProp(1) as New com.sun.star.beans.PropertyValue
			myFileProp(0).Name  = "MacroExecutionMode"
			myFileProp(0).Value = 4
			Calc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, myFileProp())
			exit sub
		end if
	end if
Loop
end sub
Hier wird dann von vorne gestartet, nur könnte ich mir das ja sparen, denn das die Datei geöffnet ist, ist ja jetzt klar.

Code: Alles auswählen

sub calc_auslesen
dim aAdr(23)
Adb = "Adressen.ods"
laenge = Len(Adb)
alles = StarDesktop.getComponents()
elemente = alles.createEnumeration()
Do While elemente.HasMoreElements
   aktuell = elemente.NextElement()
   If HasUnoInterfaces( aktuell, "com.sun.star.frame.XModel" ) Then
	  If aktuell.hasLocation() Then
		  if Right(ConvertFromURL(aktuell.GetLocation),laenge) = Adb Then
				blatt = aktuell.getSheets().GetByName("Ergebnis")
'				empfAll = blatt.getCellByPosition(1,23).string
				for i = 0 to 23
				aAdr(i) = blatt.getCellByPosition(1,i).string
				next i
		  end if
	  end if
   end if
Loop

rem --- bookmark ---
oDoc = thisComponent
oBM = oDoc.getBookmarks().getByName("Empfänger_Alles")
oBM.getAnchor().String = aAdr(23)
.
.
.
oBM = oDoc.getBookmarks().getByName("Zusatz")
oBM.getAnchor().String = aAdr(6)
end sub
gruß
sven-my

Re: mit writer-makro ein sheet auslesen ?

von sven-my » So, 19.08.2012 19:33

Hallo Stephan,

herzlichen Dank !

Nachdem ich Dateinamen, sheetnamen, und Zelle geändert habe, gab's schon mal den ersten Erfolg: die Zelle wurde mit Deiner Zahl belegt.
Den Rest bekomme ich jetzt hin, muß nur noch etwas "straffen".

Hat mir sehr geholfen - hätte mal früher anfragen sollen (acht Stunden Suche im Netz und den gesammelten Unterlagen ist bei der Hitze (>30° unterm Dach) kein Vergnügen.


gruß
sven-my

Re: mit writer-makro ein sheet auslesen ?

von Stephan » So, 19.08.2012 18:56

Wo mache ich den Fehler, und wie kann ich ihn beheben ?
Du mußt erst das richtige Dateiobjekt finden und referenzieren, denn es können ja auch mehrere Dateien geöffnet sein. Ein passender Code ist in meinem post vom Fr, 22.12.2006 03:42 im Thread viewtopic.php?f=18&t=10289.
Dort entspricht der Inhalt der Objektvariablen "aktuell" dem was Du als "calc" in Deinem Makro bezeichnest.



Gruß
Stephan

[gelöst] mit writer-makro ein sheet auslesen ?

von sven-my » So, 19.08.2012 17:32

Hallo Experten,

entweder ist es die Hitze, oder ich bin zu doof zum Suchen. Wahrscheinlich letzteres.

Ich will mit einem Makro in writer eine calc-tabelle auslesen.
Das Öffnen klappt hervorragend, das Auslesen auch soweit, nur daß ich vor dem Auslesen die Zelle(1,23) / (B24) aktualisieren muß.

Mein Problem: ich finde keine Möglichkeit, wie ich das Dokument "Daten.ods" mit dem Makro in writer ansprechen kann, wenn dies schon geöffnet ist.

Code: Alles auswählen

Sub DateiOeffnen
Pfad = "E:\OpenOffice\Datenbanken\Daten.ods"
Url = ConvertToUrl(Pfad)
    Dim myFileProp(1) as New com.sun.star.beans.PropertyValue
    myFileProp(0).Name  = "MacroExecutionMode"
    myFileProp(0).Value = 4
    Calc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, myFileProp())
	Sheet = Calc.Sheets().getByName("Ergebnis")
	Tex = Sheet.getCellbyPosition(1,23).string
	msgbox Tex
End Sub

Ich hab's probiert mit

Code: Alles auswählen

sub Daten_lesen
	calc = "Daten"
	Sheet = Calc.Sheets().getByName("Ergebnis")
	Tex = Sheet.getCellbyPosition(1,23).string
	msgbox Tex
End sub

aber das ist wohl zu einfach gedacht, denn es ergibt in der zweiten Zeile
"BASIC Laufzeitfehler / Objektvariable nicht belegt".

Wo mache ich den Fehler, und wie kann ich ihn beheben ?


gruß
sven-my

Nach oben