Zellen referenzieren mit .Cells()

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

Moderator: Moderatoren

saxo
**
Beiträge: 47
Registriert: Do, 01.04.2010 00:45

Zellen referenzieren mit .Cells()

Beitrag von saxo »

Hallo,
versuche folgenden Code aus Excel in Libreoffice umzuschreiben. Bekomme Fehlermeldung:
Error 35: Prozedur Sub oder Function nicht definiert. In line: 13
Das Schräge ist, dass es unter Linux funktioniert, sobald ich im Quellcode auch nur irgend ein Zeichen in einem Kommentar verändere. Unter Windows scheint es auch zu funktionieren.
Es geht um .cells() und die With Sheets() Formulierung, die wohl in LO nicht richtig funktionieren.
Habe auch schon mit ThisComponent.CurrentController.ActiveSheet rumprobiert um die Tabelle und die Zelle zu adressieren, bekomme das aber nicht hin. Das Programm soll den Inhalt der ersten Zelle in eine utf-8 Textdatei im gleichen Ordner schreiben.
Vielen Dank

Sub Test()
Dim myTextFile As Object, mySf As Object, myFileStream As Object
Dim s As String

On Error Goto ErrorHandler
mySf = createUnoService("com.sun.star.ucb.SimpleFileAccess")
myTextFile = createUnoService("com.sun.star.io.TextOutputStream")
myFileStream = mySf.openFileWrite(CurrentFolder() & "Test.csv")
myTextFile.OutputStream = myFileStream
myTextFile.Encoding = "UTF-8"

With Sheets("contacts")
s = .Cells(1, 1)
myTextFile.writeString(s & chr(13) & chr(10))
End With
MsgBox "exported to Test.csv in same folder"
myFileStream.closeOutput : myTextFile.closeOutput
Exit Sub

ErrorHandler:
MsgBox "Error " & Err & ": " & Error$ & chr(13) & "In line: " & Erl
myFileStream.closeOutput : myTextFile.closeOutput
End Sub

Sub CurrentFolder() As String
REM Funktioniert unter Windows und Linux
dim sUrl As String
dim sParts As Variant
sUrl = ThisComponent.getURL()
sParts = Split(sUrl, "/")
ReDim Preserve sParts(0 to UBound(sParts) - 1)
CurrentFolder = Join(sParts, "/") & "/"
'MsgBox(CurrentFolder)
End Sub
Dateianhänge
Test.ods
(20.84 KiB) 64-mal heruntergeladen
craig22
****
Beiträge: 135
Registriert: Mi, 19.08.2020 13:47

Re: Zellen referenzieren mit .Cells()

Beitrag von craig22 »

Hallo,

bisher koonte ich 4 Probleme feststellen:
  • Es fehlen die Referenzierung auf das aktuelle Dokument und
  • die explizite Referenzierung der Tabelle
  • die explizite Referenzierung der Zelle
  • SimpleFileAccess (siehe weiter unten)

Code: Alles auswählen

	Dim oDoc as Object, oSheet as Object
	oDoc=ThisComponent						' 1)
	oSheet=oDoc.getSheets().getByName("contacts")	' 2)
und hier muss die Referenzierung der gewünschten Zelle so lauten:

Code: Alles auswählen

	With oSheet("contacts")
		s = .getCellByPosition(1, 1).String	' .String oder .Value ! In Deinem Fall .String 	' 3)
		myTextFile.writeString(s & chr(13) & chr(10))
	End With
Nutze zur Starbasic-Code-Inspektion dieses Tool:
XRay-Tool
Es handelt sich hierbei um ein Writer-Dokument mit Installations-Makros und es ist gleichzeitig die Doku zum Tool.

weitere Info's und Doku's:
https://wiki.openoffice.org/wiki/DE/Mak ... c_Tutorial
Dannenhöfer

Ein weiteres Problem betrifft SimpleFileAccess.
Lese dazu in diesem Buch auf Seite 187:
http://www.uni-due.de/~abi070/count.php ... eutsch.pdf

AOO API → SimpleFileAccess
LO API → SimpleFileAccess
Gruß

Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
saxo
**
Beiträge: 47
Registriert: Do, 01.04.2010 00:45

Re: Zellen referenzieren mit .Cells()

Beitrag von saxo »

Vielen Dank craig, wieder what learned...
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Re: Zellen referenzieren mit .Cells()

Beitrag von Karolus »

Hallo
Ich sehe das du eigentlich nur Adress-daten aus …csv nach …vcf wandeln möchtest, an der Stelle könntest du dann python benutzen, und das mit Hilfe von csv2vcf erledigen.
https://github.com/Moduland/csv2vcf
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
saxo
**
Beiträge: 47
Registriert: Do, 01.04.2010 00:45

Re: Zellen referenzieren mit .Cells()

Beitrag von saxo »

Das Problem mit den vcards ist ein grösseres. Dieses Format ist sowas von inkompatibel zu relationalen Datenbanken. Hab es jetzt hinbekommen, dass die wichtigsten Felder aus einer Base-Abfrage in vcard gewandelt werden können, aber auch nur über den calc-Umweg. Ein csv-Import ins Handy funktioniert auch nur über google und die ändern dauernd etwas am Format.
Das Ziel ist ein vom Internet unabhängiger Abgleich mit dem Handy über Radicale oder Baikal. Keine Daten mehr bei google & co.
Antworten