Seite 1 von 1

[erledigt]Kopieren von Sonderzeichen

Verfasst: Di, 25.08.2015 15:33
von gschuckar
Moin,

mit den folgenden Zeilen

Code: Alles auswählen

aData = source.GetDataArray()
destRange.setDataArray(aData)
kopiere ich erfolgreich einen Zellenbereich in einen anderen.

Jetzt ergibt sich, das in dem zu kopierenden Bereich Sonderzeichen vorhanden sind. Manuell, mittels strg-c und strg-v ist das Kopieren dieser Zeichen kein Problem. Mit den obigen Zeilen werden die Sonderzeichen jedoch nicht kopiert. Das Ergebniss ist z.B. ein "ü". Das Sonderzeichen ist ein Haken.

Es geht um Openoffice 4.1.1 auf Ubuntu 12.04.

Ich weiß leider auch nicht, wie ich mittels xray herrausfinden kann, ob man getDataArray oder setDataArray Parameter, und wenn ja, welche mitgegeben werden können.
In den von mir gelesenen Dokus, insbesondere von Andrew Pitonyak, OpenOffice.org Makros erklärt, finde ich keine weitere Erklärung.

Wo kann ich nachlesen, oder wie kopiere ich die Sonderzeichen?

Gruß

Gerd

Re: Kopieren von Sonderzeichen

Verfasst: Di, 25.08.2015 16:46
von Karolus
Hallo

Kann ich nicht nachvollziehen, machst du irgendetwas mit `adata` zwischen ..get... und ..set..?

Re: Kopieren von Sonderzeichen

Verfasst: Di, 25.08.2015 17:12
von komma4
"Normale" Sonderzeichen [Umlaute, @, € etc.] werden bei mir kopiert.
Sonderzeichen aus speziellen Fonts aber nicht - mit .setDataArray !


Diese werden aber kopiert, wenn ich die Funktion .copyRange nehme:

Code: Alles auswählen

idxSheet = 0

Dim sourceRangeAddress As New com.sun.star.table.CellRangeAddress
Dim targetAddress As New com.sun.star.table.CellAddress

' Quellbereich
sourceRangeAddress.Sheet = idxSheet
sourceRangeAddress.StartColumn = 1
sourceRangeAddress.StartRow = 1
sourceRangeAddress.EndColumn = 1
sourceRangeAddress.EndRow = 8

' erste Ziel-Zelle
targetAddress.Sheet = idxSheet
targetAddress.Column = 9
targetAddress.Row = 1

sheet = ThisComponent.Sheets.getByIndex(idxSheet)
sheet.copyRange( targetAddress, sourceRangeAddress )

Probiere es mal aus.
[Getestet mit AOO 4.1.1, Sonderzeichen aus einem "Typefont" TTF, welche mit .setDataArray nicht korrekt übernommen wurden]


EDIT: DIM Anweisungen, Kopier-Fehler bereinigt

Re: Kopieren von Sonderzeichen

Verfasst: Di, 25.08.2015 17:37
von Karolus
Hier funktioniert das auch mit allem möglichen:

Code: Alles auswählen

z.B.::  ꯍ몿 ꪪ@ÜÄ¢¢¢ðđŋħ̣̣ĸłł
また、異なるソフトで申し訳ありませんが、類似したソフトで
@ÜÄ¢¢¢ðđŋħ̣̣ĸłłĸ
궭
ohne sichtbare Darstellungsprobleme mit get|set..DataArray

(get|set..DataArray macht wirklich nichts ausser kopieren, den Fehler würde ich dann eher an der Stelle vermuten, das es soffice im Zielbereich nicht gelingt jedem Zeichen auch einen Schriftfont zuzuordnen mit dem es dargestelt werden kann.)

Re: Kopieren von Sonderzeichen

Verfasst: Di, 25.08.2015 19:41
von gschuckar
Moin,

@Karolus

Es tut mir ja leid, aber Sonderzeichen werden hier mit get- setDataArray nicht kopiert, is so. Zwischen den o.a. Codezeilen passiert nichts. Könnte es sich um eine falsche Formatierung der Zellen handeln? Wohl eher nicht, oder?

@Winfried

Danke für den Tipp. Mit rangeCopy werden auch Sonderzeichen kopiert.

Dabei bleiben zwei Fragen:
-- Bei Karolus funktioniert das Kopieren von Sonderzeichen. Die Frage ist: Was ist auf meinem System so anders, das es hier nicht geht?
-- Ich habe die Adressfindung zu rangeCopy ein wenig umgeschrieben.
Wenn ich

Code: Alles auswählen

Dim sourceRangeAddress As New com.sun.star.table.sourceRangeAddress
Dim targetAddress As New com.sun.star.table.targetAddress
benutze, dann bekomme ich die Fehlermeldung : Kein Zugriff auf Object.Ungültige Objectreferenz.
Ich glaube, die richtige Library wird nicht geladen. Ich beginne die Anwendung mit

Code: Alles auswählen

GlobalScope.BasicLibraries.LoadLibrary("Tools")
Das langt eigentlich immer. Für die Deklaration "As New com.sun.star.table.sourceRangeAddress" z.B. offensichtlich nicht.

Gruß
Gerd

Re: Kopieren von Sonderzeichen

Verfasst: Di, 25.08.2015 20:43
von mikeleb
Hallo,

ich muss (nach Test) karolus zustimmen. Bei mir (LibO4.3+Ubuntu12.04) werden Sonderzeichen per .getarray .setarray durchaus (richtig) kopiert. Unansehnlich wird es nur, wenn beide Zellbereiche mit unterschiedlichen Fonts formatiert sind.
Umlaute, @, €
sind in vielen Fonts identisch gelegen, andere Zeichen hingegen nicht.

Re: Kopieren von Sonderzeichen

Verfasst: Di, 25.08.2015 20:47
von gschuckar
Moin,

ich mach das jetzt so:

Code: Alles auswählen

sub copy(doc,destination, source)
	Dim oSourceSheet       
	Dim oDestSheet
	Dim destAddress
	Dim oSourceAddress 
	Dim oCellAddress  
	Dim iSheetNumber as Integer
	Dim row,column as integer
	destAddress = destination.getCellAddress
	with destAddress
		iSheetNumber	= .sheet
		oDestSheet	= doc.Sheets(iSheetNumber)
		column		= .Column		
		row			= .Row			
	end with
	oSourceAddress = source.getRangeAddress
	'Xray destination.getCellAddress
	oCellAddress  = oDestSheet.getCellByPosition(column, row).getCellAddress()  
	oDestSheet.copyRange(oCellAddress, oSourceAddress)
end sub
und alles ist gut.

Danke Ihr Beiden
Gruß
Gerd

Re: [erledigt]Kopieren von Sonderzeichen

Verfasst: Di, 25.08.2015 21:20
von Karolus
Hallo


Wie gesagt, ich hab hier ( mit Linux&Aoo ..&LOO) keine derartigen Probleme mit ...DataArray weder aus Basic noch aus Python heraus aufgerufen.

@mikele
sind in vielen Fonts identisch gelegen, andere Zeichen hingegen nicht.
Fonts die Codepoints auf Zeichen mappen zu denen sie nicht gehören sind schlicht kaputt, aber das ist hier nicht das Thema.

Re: [erledigt]Kopieren von Sonderzeichen

Verfasst: Mi, 26.08.2015 07:02
von gschuckar
Moin Mikeleb,
man weiß ja nie, ob einem nicht auch mal ein Fehler passiert. Dein Beispiel habe ich hier ausgeführt. Ergebnis: Sonderzeichen werden nicht kopiert. Ich mus diese Aussage vielleicht ein wenig revidieren: Sie werden kopiert, aber nicht richtig angezeigt.

Die Zelle A1 zeigt ein Pik und ein einseitig offenes Dreieck. Die Zelle ist mit Standard Symbols L formatiert. Führt man Dein Beispiel aus, so werden beide Zeichen nach B1 kopiert. Die Zelle ist sodann mit OpenSymbol formatiert. Das bedeutet: Das Format wird bei get- setDataArray nicht mit kopiert. Zumindest ist es auf meinem Rechner (UBUNTU 12.04) so. Ich probiere das gleich mal auf einem Rechner mit Windows 7 aus und werde berichten.

Gruß
Gerd

Re: [erledigt]Kopieren von Sonderzeichen

Verfasst: Mi, 26.08.2015 07:14
von gschuckar
Moin,
auf Windows 7 mit OpenOffice 4.1.1 das gleiche Ergebniss. Kopiert wird, angezeigt wird falsch. Fazit: Format wird nicht mit kopiert. Nun ist es ja -- zunächst -- egal, ob ich mit copyRange oder get- setDataArray kopiere. Dennoch die Frage: Was muss ich unternehmen, damit das Format bei get- setDataArray auch kopiert wird?
Jede Zelle vorher formatieren?
Was ist, wenn ich nicht weiß, ob jetzt ein Sonderzeichen oder ein normaler Text zu kopieren ist?

Gruß
Gerd

Re: [erledigt]Kopieren von Sonderzeichen

Verfasst: Mi, 26.08.2015 08:58
von komma4
gschuckar hat geschrieben:damit das Format bei get- setDataArray auch kopiert wird?
Gar nichts.
setDataArray kopiert nur Werte, nicht (vollständig Zell-) Formatierungen. [manche Zeichen-Fonts schon, aber eben nicht alle!]

Zu sehen, wenn man bspw. Zellen mit Zeichenfarbe, Hintergrund oder Währungsformatierung, oder [ganz allgemein und wichtig!] Zellformatvorlagen im Quellbereich hat.

copyRange nimmt diese Attribute mit.


Und (schäm!): ich hatte einen Fehler im geposteten Code - der ist nun bereinigt. Hat nichts mit der Bibliothek Tools zu tun