Tabellen zusammenführen

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Tabellen zusammenführen

Beitrag von komma4 »

Gast hat geschrieben:Nun möchte ich alle Zeilen dieser Tabellen in der ersten Tabelle "Zusammenfassung" zusammenführen.
Kopierern, Ausschneiden und Einfügen... dürfte die schnellste (und offensichtlichste) Lösung sein.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Tabellen zusammenführen

Beitrag von clag »

Hallo Gast

Das kann man recht einfach als Makro aufzeichnen und dann auf einen Button legen zum beliebigen wiederholen

im welchem Umfang verändern sich die Unter-Tabellen?
und sind die zu kopierenden Bereiche konsistente Datenbereiche also ein Bereich ohne Leerzeile/Spalten dazwischen?
oder wie wo was ?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Tabellen zusammenführen

Beitrag von clag »

Hi

falls noch Interesse besteht
so geht es mit 33 Maus/Tastaturklicks bei konsistenten Datenbereichen
collect_data.ods
(22.42 KiB) 71-mal heruntergeladen
Bitteschöööööön
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
joemouth
Beiträge: 9
Registriert: Fr, 09.07.2010 02:01

Re: Tabellen zusammenführen

Beitrag von joemouth »

Vielen Dank für den super Service!
clag hat geschrieben:so geht es mit 33 Maus/Tastaturklicks bei konsistenten Datenbereichen
die Struktur bleibt gleich, keine Leerzeilen und Spalten, jedoch ändert sich die Zeilenanzahl.

Ich werde mir das Makro am Wochenende anschauen.

Herzlichen Dank
OO portable 3.2.0 deutsch
WIN XP, WIN Vista, WIN 7
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Tabellen zusammenführen

Beitrag von clag »

Hallo joemouth

das Beispiel zeigt auf wie du es machen kannst,
du kannst das Makro nicht so ohne weiters kopieren und auf ein anderes Cals Dokument anwenden,
weil es auf gezeichnet und nicht geschrieben wurde.

Die im Beispiel beschrieben Vorgehensweise kannst du aber bei
joemouth hat geschrieben:die Struktur bleibt gleich, keine Leerzeilen und Spalten, jedoch ändert sich die Zeilenanzahl.
genauso anwenden, du hast nur etwas mehr Klicks weil mehr Unter-Tabellen. ;)

dann hoffe ich es hilft dir weiter
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Tabellen zusammenführen

Beitrag von komma4 »

War in der Zwischenzeit offline und hatte ausnahmsweise etwas Zeit.

Dabei kam folgendes Makro raus...vielleicht hilft es ja jemanden 8)



Den Namen des Zielblattes anpassen (erste Konstante), ggfs. die Blätter in der 2. Konstanten benennen, die nicht bearbeitet werden sollen.
Kopiert keine Formate!

Code: Alles auswählen

' de40039
' Inhalte kopieren auf ein Zielblatt

const cZielBlatt = "summary"
const cNichtbearbeiten = "Steuerung Deckblatt label"

Private sMakroName
Private oZielBlatt
Private oZielBereich
Private oZielCursor
Private lMaxZeilen
Private lErsteSpalte
Private lLetzteZeile

' ------------------------------------------------------------------
Sub de40039
sMakroName = "Makro de40039"
' Kopieren aller Daten von einer Anzahl Tabellenblätter
' auf ein Blatt "Zusammenfassung"


' Objekte der Datei
oDok = ThisComponent
oZielBlatt = oDok.Sheets().getByName( cZielBlatt )

' Cursor für Ziel
oZielCursor = oZielBlatt.createCursor() 


' Zieladresse bestimmen
oZielCursor.gotoStartOfUsedArea( FALSE )
oZielCursor.gotoEndOfUsedArea( TRUE )
lErsteSpalte = oZielCursor.getRangeAddress().StartColumn
lLetzteZeile = oZielCursor.getRangeAddress().EndRow

' max Anzahl Zeilen pro Blatt
lMaxZeilen = oDok.Sheets().getByIndex( 0 ).Rows.getCount() 

de40039_kopieren

End Sub 

' ------------------------------------------------------------------
' Routine zum Kopieren der Daten
Sub de40039_kopieren

' alle Namen
aQuellBlaetter = oDok.Sheets().ElementNames


' für alle Blätter im Quellbereich
For i = LBound( aQuellBlaetter ) To UBound ( aQuellBlaetter )


 oTempBlatt = oDok.Sheets().getByName( aQuellBlaetter(i) )
 oTempBlattName = oTempBlatt.Name
 
 
 If Instr( cNichtbearbeiten, oTempBlattName ) >  0  Then
    oTempBlattname = "nicht bearbeiten"
 End If
 
 
 Select Case oTempBlattName
    
    ' Zielblatt nicht bearbeiten
    Case cZielBlatt
    
    ' sonstige Blätter,die nicht bearbeitet werden sollen
    Case "nicht bearbeiten" 
    
    ' alle anderen kopieren
    Case Else
       oQuellCursor = oTempBlatt.createCursor()
       ' Datenbereich ermitteln
       oQuellCursor.gotoStartOfUsedArea( FALSE )
       oQuellCursor.gotoEndOfUsedArea( TRUE )
       
       ' Bereichsadressen
       aQuellAdresse = oQuellCursor.getRangeAddress()

       aQuellDatenBereich = oTempBlatt.getCellRangeByPosition( _
          aQuellAdresse.StartColumn, aQuellAdresse.StartRow, _
          aQuellAdresse.EndColumn, aQuellAdresse.EndRow )
 
       ' Prüfen, ob ins Ziel passt
        If ( aQuellDatenBereich.Rows.Count + lLetzteZeile > lMaxZeilen ) Then
          MsgBox "Zielbereich zu klein zum Einfügen!" & CHR(10) & _
          "Blatt " & s & " nicht kopiert", 0, sMakroName
          STOP
       End If
       '
       aQuellDaten = aQuellDatenBereich.getDataArray()
       '           
       oZielBlatt.getCellRangeByPosition( _
          aQuellAdresse.StartColumn , _
          aQuellAdresse.StartRow + lLetzteZeile, _
          aQuellAdresse.EndColumn , _
          aQuellAdresse.EndRow + lLetzteZeile ).setDataArray( aQuellDaten ) 
       
       ' letzteZeile neu setzen
       lLetzteZeile = lLetzteZeile + aQuellDatenBereich.Rows.Count 
 
 End Select
 
Next

End Sub
Der Code und Ablauf sollten selbsterklärend sein... wenn Frage bestehen: fragen !
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
joemouth
Beiträge: 9
Registriert: Fr, 09.07.2010 02:01

Re: Tabellen zusammenführen

Beitrag von joemouth »

komma4 hat geschrieben: Der Code und Ablauf sollten selbsterklärend sein... wenn Frage bestehen: fragen !
Und schon die erste Frage:

Das Makro stoppt hier mit "Object variable not set"

Code: Alles auswählen

aQuellBlaetter = oDok.Sheets().ElementNames
Da ich noch keine Erfahrung mit OO Makros habe, komme ich nun nicht weiter.

Was ist zu tun?

Vielen Dank
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Tabellen zusammenführen

Beitrag von komma4 »

mmmh,

setze mal die Zeile

Code: Alles auswählen

Private oDok
oben zu den anderen Private Zeilen.


Klappt es dann?


Du führst das Makro de40039 aus...nicht das Unterprogramm de40039_kopieren?!
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Tabellen zusammenführen

Beitrag von clag »

komma4 hat geschrieben:Klappt es dann?
jetzt ja :)

nun möchte ich aber verhindern, das von allen QuellTabellen die Spaltenköpfe mit kopiert werden
weil die Tabellen alle gleich aufgebaut sind und die ZielTabelle bereits Spaltenköpfe hat

da müsste ein "-1" oder so etwas an der richtigen Stelle diesen Wunsch erfüllen nur wo ?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Tabellen zusammenführen

Beitrag von komma4 »

Bei der Setzung von aQuellDatenBereich, StartRow +1,an den zwei Stellen im Code, wo verwendet
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Tabellen zusammenführen

Beitrag von clag »

Hi

so jetzt läuft das Makro prima :D

Danke........
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
joemouth
Beiträge: 9
Registriert: Fr, 09.07.2010 02:01

Re: Tabellen zusammenführen

Beitrag von joemouth »

komma4 hat geschrieben: setze mal die Zeile

Code: Alles auswählen

Private oDok
oben zu den anderen Private Zeilen.

Klappt es dann?
Ja, Bestens, nun funktioniert es, herzlichen Dank und ein schönes Wochenende!
OO portable 3.2.0 deutsch
WIN XP, WIN Vista, WIN 7
Antworten