Tabellenblätter kopieren (Calc)

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: Tabellenblätter kopieren (Calc)

von Stephan » Mi, 21.09.2005 18:14

Ich kenne auch keinen nativen Code, jedoch:
Hierfür feht mir eine Idee wie ich das machen soll.
Naja, wie würdest Du es denn per Hand machen?

Das aufzuzeichnen gibt sowas hier:

Code: Alles auswählen

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(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "DocName"
args1(0).Value = "jms1"
args1(1).Name = "Index"
args1(1).Value = 2
args1(2).Name = "Copy"
args1(2).Value = true

dispatcher.executeDispatch(document, ".uno:Move", "", 0, args1())
Wenn Du es selbst aufzeichnest kannst Du leicht nachvollziehen das:

Code: Alles auswählen

args1(0).Name = "DocName"
args1(0).Value = "jms1"
natürlich (in 1.1.x) nur der Dokumentname ist wenn das Dokument unter Eigenschaften bei "Titel" keinen Eintrag hat

Code: Alles auswählen

args1(1).Name = "Index"
args1(1).Value = 2
Da im Dialog nur der Punkt "einfügen vor" verfügbar ist und einfügen vor <x> als Index wieder <x> ergibt

Ja und damit hast Du alles, Du mußt nur:
*das zu kopierende Blatt aktivieren
*den Titel des Zieldokuments wissen
*wissen wo Du einfügen willst
*den obenstehenden Code ausführen

somit:

Code: Alles auswählen

Sub kopieren()
'das zu kopierende Blatt aktivieren
Sheet = ThisComponent.Sheets.getByName("Beispiel")
ThisComponent.CurrentController.setActiveSheet(Sheet)
'den Titel des Zieldokuments wissen
'-->zunächst öffnen:
Dim Dummy()
sUrl = convertToURL("C:\Datei.sxc")  'die zweite Datei 
oDok2 = StarDesktop.loadComponentFromURL(sURL, "_blank", 0, Dummy()) 
'-->Titel oder nicht?
If oDok2.getDocumentInfo.title <> "" Then
titel = oDok2.getDocumentInfo.title
Else
i = 4
Do
i = i + 1
a = Right(oDok2.URL, i)
Loop While Left(a,1)<>"/"
titel = Right(a, LEN(a)-1)
end if 
'wissen wo Du einfügen willst
'weiß ich auch nicht, z.B.:
pos = 1 'ganz links
'den obenstehenden Code ausführen
dim document   as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
Dim args1(2) as new com.sun.star.beans.PropertyValue 
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
args1(0).Name = "DocName"
args1(0).Value = titel
args1(1).Name = "Index"
args1(1).Value = pos
args1(2).Name = "Copy"
args1(2).Value = true
dispatcher.executeDispatch(document, ".uno:Move", "", 0, args1())
End Sub

Gruß
Stephan

Geht noch nicht so wie ich will

von fichte.buche » Mi, 21.09.2005 15:50

Hallo,

Vielen Dank Toxitom.
Ich hab inzwischen so einiges ausprobiert, aber ganz komm ich noch nicht dorthin wo ich will.
Mit dem (oDok2.getSheets().insertByName("meineKopierteTab", oSheet)) wie du schrieben hast funktionierts leider nicht.
Ich hab dann probiert ein neues Tabellenblatt einzufügen dies funktioniert auch mit

Code: Alles auswählen

oDoc.Sheets.insertNewByName( "Aktuell", 0 )
Aber wie kann man jetzt die ganze Tabelle samt Bildern, Formatierung usw. von der einen Datei in die nächst kopieren. Hierfür feht mir eine Idee wie ich das machen soll.
Bitte um Hilfe. DANKE

Fichte.Buche

von Toxitom » Di, 20.09.2005 17:20

Hey Fichte.buche,
..Aber wie geht das von einer Datei in die andere. ...
Nicht so einfach :wink:

Da usst du zuerst die andere Datei öffnen, das Objekt des Tabellenblattes erhalten und dann dieses als neues Tabellenbaltt dort einfügen.

Nicht getestet! Im Prinzip sollte es wie folgt gehen:

Code: Alles auswählen

...
oDok1 = thisComponent   'das aktive Dokument
oSheet = oDok1.sheets(0)   'das erste Tabellenblatt

sUrl = convertToURL("d:/meinPfad/meineDatei2.ods")  'die zweite Datei
oDok2 = StarDesktop.loadComponentFromURL(sURL, "_blank", 0, Dummy())
oDok2.getSheets().insertByName("meineKopierteTab", oSheet)
...
Evt. musst du die zweite Tabelle zunächst als Instanz des zweiten Dokumentes erzeugen (oSheet2 = oDok2.createInstance("com.sun.star.sheet.Spreadsheet") )und dann den kompletten Inhalt der ersten Tabelle in den Ihnahlt der zweiten Tabelle kopieren. Das musst du einfach ausprobieren.

Gruss
Thomas

Tabellenblätter kopieren (Calc)

von fichte.buche » Di, 20.09.2005 14:14

Hallo,

Ich möchte ein Makro erstellen mit dem ich ein Tabellenblatt (Sheet) von einer Datei in eine ander kopieren.

Innerhalb einer Datei funktioniert das z.B. mit

Code: Alles auswählen

oSheet.CopyByName("Name1", "Name2", 1)
Aber wie geht das von einer Datei in die andere.

Vielen Dank im Voraus
Fichte.Buche

Nach oben