🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

setDataArray und Zeilenumbrüche

Alles zur Programmierung im LibreOffice.
Antworten
mikele
* LO-Experte *
Beiträge: 1932
Registriert: Mo 1. Aug 2011, 20:51

setDataArray und Zeilenumbrüche

Beitrag von mikele » Di 23. Feb 2016, 22:01

Hallo,

die Methode setDataArray() hat bei mir (Linux, LO4.4.7 und 5.03) die seltsame Eigenschaft offenbart, Zeilenumbrüche innerhalb von Zellen zu vernichten.
Ist (der Einfachheit halber) in A1 ein zweizeiliger Text, so wird per

Code: Alles auswählen

Sub Main
	odoc=thiscomponent
	ocells=odoc.sheets(0).getcellrangebyname("a1")
	atxt=ocells.getdataarray()
	ocells.setdataarray(atxt)
End Sub
daraus ein einzeiliger Text (intern wird aus dem Umbruch 0A der Umbruch 0D).
Für eine einzelne Zelle wäre das unproblematisch über den String der Zelle zu umgehen, aber für ganze Zellbereiche ist es ärgerlich.
Könnt ihr das Verhalten bestätigen? Ist es ein Bug oder verstehe ich es nicht richtig?
Gruß,
mikele

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: setDataArray und Zeilenumbrüche

Beitrag von gogo » Di 23. Feb 2016, 23:28

jo - ist bei mir auch so.
Abhilfe schafft der Dispatcher ... bei allen "Nachteilen" braucht man ihn von Zeit zu Zeit:

Modifiziert nach Andrew Pitonyak/Volker Lenhardt (https://www.uni-due.de/~abi070/files/OO ... eutsch.pdf)

Code: Alles auswählen

oDoc1= thisComponent
oDispatcher=CreateUnoService("com.sun.star.frame.DispatchHelper")
oFrame1=oDoc1.CurrentController.Frame

' Die Zellen A1:B2 werden über den Controller ausgewählt.
oSheet=oDoc1.Sheets(0)
rng=oSheet.getCellRangeByName("A1:B2")
oDoc1.CurrentController.select(rng)

' Mit einem Dispatch-Befehl wird in die Zwischenablage kopiert.
oDispatcher.executeDispatch(oFrame1,".uno:Copy","",0,Array())

' Auswahl der oberen linken Ecke zum Einfügen der Daten.
rng=oDoc1.Sheets(0).getCellRangeByName("F5")

' Erst wird der Viewcursor dort platziert, dann wird aus der Zwischenablage eingefügt.
oDoc1.CurrentController.select(rng)
oFrame2=oDoc1.CurrentController.Frame
oDispatcher.executeDispatch(oFrame2,".uno:Paste","",0,Array())
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2540
Registriert: Fr 10. Dez 2010, 10:01

Re: setDataArray und Zeilenumbrüche

Beitrag von karolus » Mi 24. Feb 2016, 00:37

Hallo

Falls da keine "echten" Formeln im Weg sind, kann man das Problem mit ...setFormulaArray beseitigen.

Im übrigen geht auch Copy&paste mit Api-methoden ohne Dispatcher-geschwurbel -- man müsste halt mal bei Dannenhöfer nachschauen. http://www.dannenhoefer.de/faqstarbasic ... l#Zweig197

Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten