Wie wäre es denn mit etwas Geduld? Sicherlich schauen bereits Etliche auf Deine Frage und denken über Lösungen nach, aber hier ist ein Forum von Freiwilligen das Hilfe zur Selbsthilfe geben will und kein kostenloser Support um für komplexe Fragen binnen Stunden den fertigen vollständigen Code zu liefern.Ich würde mich sehr freuen wenn mir jemand zumindest den Teil mit dem Ausfüllen des 2. Arbeitsblattes helfen kann.
Öffnen, Speichern und Schließen habe ich inzwischen lösen können, zwar statisch aber dann schreibe ich die Datei eben fortlaufend weg - das passt für mich.
hierfür allgemeinen Code anzugeben ist schwierig, weil beide Mappen jeweils ein Dokumentobjekt darstellen und also in einer Objektvariable beeinhaltet sein müssen. Die URSPRÜNGLICH (zu Beginn aller Makroaktionen) aktive Mappe ist durch ThisComponent repräsentiert, die andere Mappe musst Du direkt beim Öfnen per Makro einer Objektvariable zu weisen, also skizzenhaft:-Kopieren weniger Datensätze von aktiver zu geöffneter Mappe:
Quelle: B6:B18
Ziel Transponiert in Arbeitsmappe Daten Arbeitsblatt Daten Zellen A[r]:M[r] wobei r die nächste freie Zeile ist
Code: Alles auswählen
quelldatei = ThisComponent
quelltabellenblatt = ThisComponent.CurrentController.ActiveSheet
und
Code: Alles auswählen
zieldatei = StarDesktop.loadComponentFromUrl(...)
zieltabellenblatt = zieldatei.Sheets.getByName("meinTabellenblatt")
http://www.starbasicfaq.de/Wiekannmanau ... ugrei.html
r ermitteln:
Code: Alles auswählen
oCellCursor = zieltabellenblatt.createCursor
oCellCursor.GotoEndOfUsedArea(False)
r = oCellCursor.getRangeAddress().endRow + 1
und nun den Rest am simpelsten per Makrorecoder aufzeichnen und anpassen.
B6:B18 kopieren (vorausgesetzt das richtige Tabellenblatt der Quelltabelle ist das sichtbare Tabellenblatt):
Code: Alles auswählen
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = quelldatei.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$B$6:$B$18"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
Code: Alles auswählen
myView = zieldatei.CurrentController
mysheet = zieldatei.sheets.getByName("DasTabellenblatt")
mycell = mysheet.getCellByPosition(0,r)
myView.Select(mycell)
und transponiert einfügen:
Code: Alles auswählen
document = zieldatei.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args2(5) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Flags"
args2(0).Value = "A"
args2(1).Name = "FormulaCommand"
args2(1).Value = 0
args2(2).Name = "SkipEmptyCells"
args2(2).Value = false
args2(3).Name = "Transpose"
args2(3).Value = true
args2(4).Name = "AsLink"
args2(4).Value = false
args2(5).Name = "MoveMode"
args2(5).Value = 4
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args2())
Alle Vorstehende NUR Skizzen und kein komplett fertiger Code!
Einstieg:Formel in Arbeitsmappe Daten Arbeitsblatt Daten einfügen: N[r] = N$2*A[r]
- Formel automatisch nach rechts erweitern bis Spalte Z: Z[r] = Z$2*M[r]
- Formel in Arbeitsmappe Daten Arbeitsblatt Daten einfügen: AA[r] = Summe(N[r]:Z[r])
http://www.starbasicfaq.de/WiekannmanWe ... hreib.html
http://de.openoffice.info/viewtopic.php?t=31086
Gruß
Stephan