Makro legt Tabellenblätter an.. warum???

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

Moderator: Moderatoren

Bernhard
****
Beiträge: 182
Registriert: Do, 10.08.2006 12:04
Wohnort: Nürnberg

Makro legt Tabellenblätter an.. warum???

Beitrag von Bernhard »

Hallo, ich habe folgendes problem mit u.g. Makro: Immer wenn ich Ihn ausführe dann wird ein neues Tabellenblatt angelegt - aber nicht sichtbar sondern es erscheint nur unten links: "Tabelle 2/3" angezeigt werden nur 2.

Der Code macht im kurzen folgendes:

Zellen aus Tabelle 1 mit Zellen aus Tabelle 2 verknüpfen (damit ich die aktuellen werte dort bekomme)
In Tabelle 1 die verknüpften zellen markieren - kopieren - und als unformatierten Text wieder einfügen (damit die Verknüpfung wieder weg ist die aktuellen werte aber vorhanden sind).


Kann mir jemand sagen warum????

Hier der code :

Code: Alles auswählen

sub Aktualisieren
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "StringName"
args1(0).Value = "=Wenn('file:///C:/Users/kinder/Documents/Günter/Beruflich/Arbeitsstunden/Anlagen.ods'#Anlagen.A1="+CHR$(34)+CHR$(34)+";"+CHR$(34)+CHR$(34)+";'file:///C:/Users/kinder/Documents/Günter/Beruflich/Arbeitsstunden/Anlagen.ods'#Anlagen.A1)"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$A$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "EndCell"
args3(0).Value = "$K$1"

dispatcher.executeDispatch(document, ".uno:AutoFill", "", 0, args3())

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$A$1:$K$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "EndCell"
args5(0).Value = "$K$300"

dispatcher.executeDispatch(document, ".uno:AutoFill", "", 0, args5())

rem ----------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "ToPoint"
args6(0).Value = "$A$1:$K$300"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args6())

rem ----------------------------------------------------------------------
dim args7(0) as new com.sun.star.beans.PropertyValue
args7(0).Name = "ToPoint"
args7(0).Value = "$A$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args7())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SelectAll", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args10(0) as new com.sun.star.beans.PropertyValue
args10(0).Name = "Flags"
args10(0).Value = "A"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args10())

rem ----------------------------------------------------------------------
dim args11(0) as new com.sun.star.beans.PropertyValue
args11(0).Name = "SelectedFormat"
args11(0).Value = 1

dispatcher.executeDispatch(document, ".uno:ClipboardFormatItems", "", 0, args11())


end sub[/[/
Bernhard
------------------
OO-Forum :arrow: das beste was das Web zu bieten hat...
Bernhard
****
Beiträge: 182
Registriert: Do, 10.08.2006 12:04
Wohnort: Nürnberg

Re: Makro legt Tabellenblätter an.. warum???

Beitrag von Bernhard »

kann man das irgendwie unterdrücken das die Tabellen angelegt werden??? findi ch ja irgendwie komisch das calc sowas macht.. oder gibts da nen tieferen sinn???
Bernhard
------------------
OO-Forum :arrow: das beste was das Web zu bieten hat...
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Makro legt Tabellenblätter an.. warum???

Beitrag von balu »

Hallo Bernhard,
Bernhard hat geschrieben: kann man das irgendwie unterdrücken das die Tabellen angelegt werden???
In Gewisser hinsicht, Ja!
Nur ist die Frage ob es dann nicht vielleicht besser ist gleich eine passendere Makro-Function zu nehmen. Ich bin kein Makro-Mensch, aber in Calc würde ich als passende Alternative nämlich =DDE() empfehlen. Nur ob es sinnvoll ist DDE direkt in ein Makro einzusetzen, kann ich nicht beantworten.


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Makro legt Tabellenblätter an.. warum???

Beitrag von turtle47 »

Hi Bernhard,
Bernhard hat geschrieben:kann man das irgendwie unterdrücken das die Tabellen angelegt werden???
Einfach mit Ja zu beantworten.
balu hat geschrieben:Nur ist die Frage ob es dann nicht vielleicht besser ist gleich eine passendere Makro-Function zu nehmen.
Der Meinung bin ich auch.
Folgender Code sollte Deine Erwartungen erfüllen:

Code: Alles auswählen

Sub Daten_kopieren
   oRange  = ThisComponent.Sheets().getByIndex(1).getCellRangeByName("A1:K300")   
   oData() = oRange.getDataArray()
   oRange1 = ThisComponent.Sheets().getByIndex(0).getCellRangeByName("A1:K300")
   oRange1.setDataArray(oData())
End Sub
Ist das OK?

Viel Erfolg.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Bernhard
****
Beiträge: 182
Registriert: Do, 10.08.2006 12:04
Wohnort: Nürnberg

Re: Makro legt Tabellenblätter an.. warum???

Beitrag von Bernhard »

hallo jürgen,

irgendwie macht dein Makro nix (oder zumindest für mich nix erkennbar)

Vielleicht kann mir auch jemand sagen wie ich im Makro vermerken kann das er.

1. Datei 1 aufruft
2. Daten in Datei 1 kopiert
3. Zurückgeht in Tabelle 2
4. Daten unformatiert einfügt!
(ich bekomms net hin... einfach zu dumm für)

DANKE!
Bernhard
------------------
OO-Forum :arrow: das beste was das Web zu bieten hat...
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Makro legt Tabellenblätter an.. warum???

Beitrag von turtle47 »

Hallo Bernhard,
Bernhard hat geschrieben:Zellen aus Tabelle 1 mit Zellen aus Tabelle 2 verknüpfen (damit ich die aktuellen werte dort bekomme)
In Tabelle 1 die verknüpften zellen markieren - kopieren - und als unformatierten Text wieder einfügen (damit die Verknüpfung wieder weg ist die aktuellen werte aber vorhanden sind).
Für mich liest sich das so:
In Tabelle2 stehen die Werte. Diese werden in Tabelle1 mit einer Formel verknüpft, danach kopiert und als unformatierter Text wieder eingefügt.

Danach habe ich das Makro ja aufgebaut.
Bereich in Tabelle2 kopieren und in Tabelle1 einfügen.

Wenn es aber andersrum sein soll, also Werte aus Tabelle1 kopieren und dann in Tabelle2 einfügen dann versuche folgenden Code:

Code: Alles auswählen

Sub Daten_kopieren
   oRange  = ThisComponent.Sheets().getByIndex(0).getCellRangeByName("A1:K300")   
   oData() = oRange.getDataArray()
   oRange1 = ThisComponent.Sheets().getByIndex(1).getCellRangeByName("A1:K300")
   oRange1.setDataArray(oData())
End Sub
Ausserdem bin ich jetzt etwas verwirrt denn Du schreibst jetzt:
Bernhard hat geschrieben:1. Datei 1 aufruft
2. Daten in Datei 1 kopiert
3. Zurückgeht in Tabelle 2
4. Daten unformatiert einfügt!
Also, ich stehe da jetzt wohl irgendwie auf dem Schlauch.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Makro legt Tabellenblätter an.. warum???

Beitrag von turtle47 »

Hallo Zusammen,

der "Aufdemschlausteher" war wohl ich. :(

Das mit der exteren Datei hatte ich übersehen.

Folgender Code, der in dem Zieldokument eingebaut ist, holt einen Datenbereich aus einem externen Dokument und schreibt diesen in das Zieldokument.

Code: Alles auswählen

Sub Copy_Aeras
	GlobalScope.BasicLibraries.LoadLibrary("Tools")
	Dim oDummy()
	Dim oDoc as Object
	oComponents = StarDesktop.getComponents()
	oUrlSrc  = "file:///C:/Users/kinder/Documents/Günter/Beruflich/Arbeitsstunden/Anlagen.ods"'Pfad zum Dokument eventuell anpassen
	dim myFileProp(0) as New com.sun.star.beans.PropertyValue
	myFileProp(0).name="Hidden" 'im Hintergrund öffnen
	myFileProp(0).value= true
	oDocSrc1 = StarDesktop.loadComponentFromURL(oUrlSrc, "_blank", 0, myFileProp())'Dokument öffnen
	oRange1 = oDocSrc1.Sheets().getByIndex(1).getCellRangeByName("A1:K300") 'Tabelle2 (Index 1)
	RangeCopy()= oRange1.getDataArray()' Bereich lesen
	oDocSrc1.close (True) 'Dokument wieder schliessen
	oRange1 = ThisComponent.Sheets().getByIndex(0).getCellRangeByName("A1:K300")'Tabelle1 ansprechen
	oRange1.setDataArray(RangeCopy())'Array schreiben
	msgbox "Die Übertragung ist abgeschlossen" , 64 , "Daten übertragen"	
End sub
Ich hoffe das war's.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Bernhard
****
Beiträge: 182
Registriert: Do, 10.08.2006 12:04
Wohnort: Nürnberg

Re: Makro legt Tabellenblätter an.. warum???

Beitrag von Bernhard »

Hallo Jürgen,

den Code hab ich jetzt reinkopiert.. bekomm aber jetzt ne fehlermeldung.. die wie folgt lautet:

Basic-Laufzeitfehler
Es ist eine Exception aufgetreten
Type: com.sun.star.lang.IndexOutofBoundsException
Message:.

kann diese mit OK bestätigen..

was heißt das? ich habe den Ort wo die Datei liegt schon verglichen.. die stimmt...
Bernhard
------------------
OO-Forum :arrow: das beste was das Web zu bieten hat...
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Makro legt Tabellenblätter an.. warum???

Beitrag von turtle47 »

Hi Bernhard,

ich vermute, dass das angesprochene Tabellenblatt nicht gefunden wird.
Hilfreich ist es immer die Zeile anzugeben welche markiert wird.

Bleibt der Code hier hängen:

Code: Alles auswählen

oRange1 = oDocSrc1.Sheets().getByIndex(1).getCellRangeByName("A1:K300") 'Tabelle2 (Index 1)
?
Dann gibt es in dem Dokument nur ein Tabellenblatt.
Ändere wie folgt:

Code: Alles auswählen

oRange1 = oDocSrc1.Sheets().getByIndex(0).getCellRangeByName("A1:K300")

War es das?

Zu Erklärung zum Tabellenindex in einem Dokument mit drei Tabellen:
erste Tabelle = Index 0
zweite Tabelle = Index 1
dritte Tabelle = Index 2

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Bernhard
****
Beiträge: 182
Registriert: Do, 10.08.2006 12:04
Wohnort: Nürnberg

GELÖST Re: Makro legt Tabellenblätter an.. warum???

Beitrag von Bernhard »

SUPER JÜRGEN! danke.. das wars.. die Datei hatt wirklich nur eine Tabelle - hab den Code geändert und jetzt gehts wunderbar!

SUPER HERZLICHEN DANK!!!!!
Bernhard
------------------
OO-Forum :arrow: das beste was das Web zu bieten hat...
Antworten