Calc-Tabellen kopieren und mit Daten füttern

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: Calc-Tabellen kopieren und mit Daten füttern

Re: Calc-Tabellen kopieren und mit Daten füttern

von MB29 » So, 04.10.2009 19:19

Yipieh!!!
Leicht verändert funktioniert mein obiges Codebeispiel:

Code: Alles auswählen

Sub Main

Dim Doc As Object
Dim Sheets As Object
Dim Sheet As Object
Dim Cell As Object

Dim NeuerName As String

Dim I As Integer
 
Doc = ThisComponent
Sheet = Doc.getSheets.getByName("Tab05")
Sheets = Doc.Sheets

For I = 5 To 20
Cell = Sheet.getCellRangeByName("C3")
Cell.Formula = "=$Tab04.$D" & I
'Nun müssen noch weitere Formeln, bzw. Verweise auf die Tab04 eingefügt werden
TabName = LTRIM(Cell.String)
Doc.Sheets.CopyByName("Tab05", TabName, Sheets.Count)
Next I
End Sub

Re: Calc-Tabellen kopieren und mit Daten füttern

von MB29 » So, 04.10.2009 17:24

Hallo,

ich bin leider doch sehr verwirrt. Bevor ich auf Eure obigen Anmerkunen eingehe stelle ich Euch hier zunächst meinen kläglich gescheiterten Versuch dar:

Code: Alles auswählen

Sub Main

Dim Doc As Object
Dim Sheets As Object
Dim Sheet As Object
Dim Cell As Object

Dim I As Integer
 
Doc = ThisComponent
Sheet = Doc.getSheets.getByName("Tab05")

For I = 5 To 20
Cell = Sheet.getCellRangeByName("C3")
Cell.Formula = "=$Tab04.$D" & I
'In die Zelle "C3" in der "Tab05" soll die Formel/der Verweis "=$Tab04.$DI" eingetragen werden, wobei I der benanntenen Zeile entsprechen soll (also Index + 1)
'später sollen noch weitere Formeln, bzw. Verweise auf die Tab04 eingefügt werden
Sheet.copyByName("Tab05", Cell.String, Doc.Sheets.count)
'Die fünfte und zunächst letzte Tabelle mit dem Namen "Tab05" soll kopiert, mit dem neuen Inhalt der Zelle C3 benannt und ans Ende der Calc-Datei gestellt werden, was leider nicht klappt
Next I
End Sub
Zunächst scheint meine Idee mit >> Cell.Formula = "=$Tab04.$D" & I << nicht zu klappen, als Basic-Laufzeitfehler wird mir jedoch nicht schon diese sondern die vorletzte Zeile >> Sheet.copyByName("Tab05", Cell.String, Doc.Sheets.count) << ausgewiesen (Eigenschaft oder Methode nicht gefunden)

Nun zu Euren Anmerkungen:

1. komma4: Verwendung von 'Variablen, bzw. >> Variant << statt >> Object <<
An der von Dir angegebenen Hilfe-Stelle konnte ich keinen Hinweis auf diese Problematik finden (dort wird "Variant" gar nicht erwähnt). Zudem hieß es in sämtlichen Beispielen Dim Doc As Object.

2. komma4: Datenbanken/Zeitstempel
Auch hier verstehe ich nicht worauf Du hinaus willst.
a) An das Historisieren von Datensätzen (Zeitstempel) habe ich im Zusammenhang mit dieser Aufgabe gar nicht gedacht.
b) Es mag sein, dass man meine Aufgabe eleganter über Datenbank-Berichte lösen kann. Damit habe ich noch nicht gearbeitet. Aus einem ersten testweisen Versuch vor vielen Jahren (seinerzeit noch mit Access 2000) habe ich in Erinnerung, dass die seinerzeitigen Formatierungsmöglichkeiten gegenüber dem Tabellenkalkulationsprogramm eingeschränkt oder doch zumindest wesentlich aufwendiger zu realisieren waren. Und die halbwegs ansehnliche Darstellung des Ergebnisses der Berechnungen ist hier auch wichtig.

Re: Calc-Tabellen kopieren und mit Daten füttern

von komma4 » Fr, 02.10.2009 10:11

MB29 hat geschrieben:noch weiteren einleitenden Code definieren muss? (z.Bsp. Bestimmung der Tabelle deren Spalte/n ausgelesen werden soll/en)
Ja.

Eine Dimensionierung von Variablen wird nur benötigt, wenn Du deren Sichtbarkeit (=Gültigkeit, Beibehaltung des Wertes) über die SUB eines Moduls hinaus sicherstellen willst;
siehe F1 Online Hilfe, OpenOffice.org Basic, Suchen: DIM ==> Arbeiten mit Variablen

Der empfohlene Typ ist Variant - nicht Object.

Möchtest Du Codesicherheit erreichen ist der Einsatz von Option Explicit angebracht.


"Natürlich" musst Du das Tabellenblatt erst festlegen,

Code: Alles auswählen

oBlatt = ThisComponent.Sheets().getByName( "Tab04" )
MB29 hat geschrieben:2. Versteht OO sofort, dass mit >> idxSpalte = 2 << und später >> For i = ... << der
Die FOR-Schleife ändert den Wert von i bei jedem Durchlauf (die korrigierte Anweisung im Folgenden)

Code: Alles auswählen

oZelle = oBlatt.getCellByPosition(  idxSpalte , i )
MB29 hat geschrieben:der .pdf-Export der neuen Tabellen (möglichst als einzelne Dateien mit (bis auf die Dateiendung) demselben Namen).
Auch dies ist eine "Standard-Aufgabe", die hier schon mehrfach besprochen wurde (Suchfunktion: PDF und FilterName)



Hole Dir Andrew Pitonyaks Makro Dokument da stehen, wie schon mehrfach hier im Forum gesagt, Beispiele für Standard-Programmieraufgaben drinne.


Noch eine Anmerkung (auch wenn Du das vllt. nicht hören magst - und es für einen "Programmieranfänger" und/oder Neu-Anwender Einarbeitung und damit Aufwand bedeutet):

Calc ist eine Tabellenkalkulation.
Du solltest eine Datenbank nehmen, um Datensätze (Du verwendest den Begriff selbst) zu historisieren (Stichwort: "Zeitstempel" und DB-Spalten "gültig-ab" und "gültig-bis")
Die Druckaufbereitung kann über Berichte erfolgen (ggfs. auch über Abfragen und Ergebnisausgabe nach Calc).


Viel Erfolg und weiterhin viel Spass mit OOo!

Re: Calc-Tabellen kopieren und mit Daten füttern

von MB29 » Fr, 02.10.2009 09:20

komma4 hat geschrieben:Hilft das?
Zunächst vielen Dank für Deine Mühe, bzw. das konkrete Beispiel, das mich in der Tat weiter bringt als die allgemeinen Hinweise
komma4 hat geschrieben:

Code: Alles auswählen

' index spalte
idxSpalte = 2

' werte für x und y setzen!
x = 4
y = 19

' Schleife
For i = x to y
' hier die Aktionen
Next i
1. Verstehe ich es richtig, dass man zuerst noch

Code: Alles auswählen

Sub Main
Dim Dim Doc As Object
und eventuell noch weiteren einleitenden Code definieren muss? (z.Bsp. Bestimmung der Tabelle deren Spalte/n ausgelesen werden soll/en)

2. Versteht OO sofort, dass mit >> idxSpalte = 2 << und später >> For i = ... << der Zeilen-Index in der in meinem Fall vierten und zunächst vorletzten Tabelle ("Tab04") gemeint ist?

Leider muss ich jetzt zur Arbeit und kann mich erst heute Abend weiter damit auseinander setzen, bzw. zu Euren Beiträgen Stellung nehmen.

Zuvor noch eine Anmerkung/Erläuterung zu meinem Projekt. Das fünfte und zunächst letzte Blatt der Calc-Datei enthält eine formatierte Tabelle mit allerlei Daten und Formeln. In diese sollen Date aus der vierten und bislang vorletzten Tabelle eingefügt (und dort ggf. vorhandene Daten überschrieben) werden, und zwar zeilenweise (zeilenweise bezieht sich auf die vorletzte Tabelle, die Einfügestellen der letzten Tabelle liegen verstreut). Für jeden Datensatz/jede Zeile der vorletzten Tabelle soll nun eine Kopie der letzten Tabelle (mit eben diesen Daten der jeweiligen Zeile der vierten Tabelle) erstellt und in der Rheinfolge der Datensätze an das Ende der Calc-Datei gestellt werden.

Das Anschlussprojekt wäre dann der .pdf-Export der neuen Tabellen (möglichst als einzelne Dateien mit (bis auf die Dateiendung) demselben Namen).


Danke nochmal für Eure Hilfe!

Re: Calc-Tabellen kopieren und mit Daten füttern

von Stephan » Do, 01.10.2009 20:07

Bei Zellen wird doch auch zwischen String und Function unterschieden, oder?
Nein. Es gibt eigentlich bezüglich des Codes nur:

Code: Alles auswählen

oZelle.String
oder:

Code: Alles auswählen

oZelle.Value
oZelle.Formula
oZelle.FormulaLocal
Auch .CellContentType unterscheidet nur zwischen: Empty, Value, Text oder Formula.


Gruß
Stephan

Re: Calc-Tabellen kopieren und mit Daten füttern

von komma4 » Mi, 30.09.2009 23:59

Code: Alles auswählen

' index spalte
idxSpalte = 2

' werte für x und y setzen!
x = 4
y = 19

' Schleife
For i = x to y
' hier die Aktionen
Next i
Der Zugriff geht dann bspw. über

Code: Alles auswählen

'  Aktionen
oZelle = oBlatt.getCellByPosition( 2, i )
oZelle.String = "Wert " & i +1
' oder was auch immer
Hilft das?

Re: Calc-Tabellen kopieren und mit Daten füttern

von komma4 » Mi, 30.09.2009 09:43

MB29 hat geschrieben:Könnt Ihr mir passende Stichworte und/oder Literturstellen benenen, die das gut erklären? Oder kann mir jemand sogar etwas Beispiel-Code schreiben?
siehe meine Antwort hier:
viewtopic.php?f=2&t=28409

Calc-Tabellen kopieren und mit Daten füttern

von MB29 » Mi, 30.09.2009 09:22

Hallo,

ohne nennenswerte Programmierkenntnisse möchte ich mich an einem (oder mehreren) Makro für Calc versuchen.

Problemstellung: Mir liegt hier eine Calc-Datei mit mehreren Arbeitsblättern vor. Das letzte Arbeitsplatt soll (mit allen Formatierungen und Formeln sowie dem Druckbereich ect.) kopiert und ans Ende gestellt werden, und zwar nicht nur einmal sonderen entsprechend der Menge von Datensätzen die in einer anderen Tabelle der Datei vorhanden sind und nach dem Ihalt der Zellen einer bestimmten Spalte in dieser Tabelle benannt werden (im konkreten Beispiel ist es die 3 Spalte der vorletzten Tabelle, dort von der C5 bis C20). Es müsste also irgendwass mit For XY 4 to 19 werden.

Später (oder meinetwegen auch vorher) sollen dann weitere Daten (Zahlen, Text und Datum) dieser Datensätze in bestimmte Zellen der neu erstellten Tabellen(-kopien) kopiert werden.

Könnt Ihr mir passende Stichworte und/oder Literturstellen benenen, die das gut erklären? Oder kann mir jemand sogar etwas Beispiel-Code schreiben?

Jedenfalls vielen dank vorab!

(wahrscheinlich komme ich erst übermorgen-früh wieder an meinen eigenen Rechner)

Nach oben