Am 20.11.2013 09:40, schrieb G. Mohing, VT:
>> Dies habe ich nicht verstanden. Was ist eine Gruppe, woran erkennt man 
>> die? Werden zwei Gruppen durch Leerzeile getrennt oder wie? Auch die 
>> Zahlen im Beispiel kann ich nicht sinnvoll vom Ursprungsformat zum 
>> Zielformat zuordnen.
> Man erkennt einer Gruppe einzig und allein durch eine wiederkehrende 
> Labelabfolge. Keine Leerzeilen. Einzig und allein eine Stack-Struktur.

Sind die Gruppen alle vollständig, oder können da u. U. auch Labels fehlen?

>> Vermutlich hast du noch keine hilfreiche Rückmeldung erhalten, weil 
>> das nicht klar genug formuliert war. Vielleicht beschreibst du einfach 
>> nochmal neu?
> Eingabedatei (Ausschnitt, 2 Blöcke):
> 5=1
> 4=2.1
> 6=61
> 37=100.0000
> 38=200.0000
> 39=20.00
> 5=121
> 4=3.2
> 6=51
> 37=112.2345
> 38=212.7654
> 39.19.99

Möglichkeit 1: Alles einlesen in ein separates Tabellenblatt (mit dem
'=' als Trenner), und dann per Makro die Gruppe zusammenfassen und
Zeilenweise in ein weiteres Tabellenblatt einfügen. Diese Variante
ermöglicht ach das Zusammenfassen unvollständiger Gruppen. Ungefähr so
(grob zusammen geschuster, ungeprüft):

Dim oSourceSheet As Object
Dim oTargetSheet As Object
Dim oCellAddress As Object
Dim oCell As Object
DIM iSourcetline as interger
DIM iTargetline as integer
Dim v As Variant
Dim sGruppe as string

oSourceSheet = ThisComponent.Sheets(SourceSheet)
oTargetSheet = ThisComponent.Sheets(TargetSheet)

iSourcetline = 1
iTargetline = 0
sGruppe = ""

oCell = oSourceSheet.getCellByPosition(1,iSourcetline)
v = oCell.String
DO UNTIL v = ""
  IF v = 5
    IF iTargetline > 0
      oCell = oTargetSheet.getCellByPosition(1,iTargetline)
      oCell.String = Trim(sGruppe)
    END IF
    iTargetline = iTargetline + 1
    sGruppe = ""
  END IF
  oCell = oSourceSheet.getCellByPosition(2,iSourcetline)
  v = oCell.String
  sGruppe = sGruppe & " " & oCell.String
  iSourcetline = iSourcetline + 1
  oCell = oSourceSheet.getCellByPosition(1,iSourcetline)
  v = oCell.String
LOOP

Variante zu Möglichkeit 1: Alternativ kann man die Datei auch direkt im
Makro öffnen und Zeilenweise einlesen. Allerdings hat man dann keine
(oder keine so gute) Möglichkeit, die eingelesenen Daten ggf. mit den
ausgegebenen Daten zu vergleichen.

Möglichkeit 2: Alles einlesen in ein separates Tabellenblatt (siehe
Möglilchkeit 1) und per Formel zusammenfassen. Diese Variante setzt
allerdings voraus, daß alle Gruppen vollständig sind. Ungefähr so (auch
nur grob zusammen geschustert):

=INDIREKT(ADRESSE(((ZEILE()-1)*6)+1;2;4;2;"Tabelle1")) & " " & _
 INDIREKT(ADRESSE(((ZEILE()-1)*6)+2;2;4;2;"Tabelle1")) & " " & _
 INDIREKT(ADRESSE(((ZEILE()-1)*6)+3;2;4;2;"Tabelle1")) & " " & _
 INDIREKT(ADRESSE(((ZEILE()-1)*6)+4;2;4;2;"Tabelle1")) & ...

Wenn die Gruppen auch teilweise unvollständig sein können sollten, dann
müsstest Du das ganze aufwendiger gestalten. Ich würde dann mehrere
Spalten erstellen und über SVERWEIS arbeiten:

Spalte A
=ADRESSE(((ZEILE()-1)*6)+1;1;4;2;"Tabelle1") & ":" &
ADRESSE(((ZEILE()-1)*6)+6;2;4;2)

Spalte B:
=SVERWEIS(5;INDIREKT($A1);2;0)

Spalte C:
=SVERWEIS(4;INDIREKT($A1);2;0)

Spalte D:
=SVERWEIS(6;INDIREKT($A1);2;0)

Spalte E:
=SVERWEIS(37;INDIREKT($A1);2;0)

usw.

> Ausgabedatei:
> a) Tabellarisch mit Leerzeichen als Trenner und/oder
> b) in Formularstruktur mit Textbezeichnungen; zB als Nachweis

Letzteres verstehe ich nicht; meinst Du, als zeilenweisen Datensatz mit
den einzelnen Werten in je einer Zelle? Im Prinzip macht das (fast) die
obige Formel (wenn Du die einzelnen 'INDIREKT(...)'-Teile anstatt
miteinander zu verknüpfen eben in separate Spalten schreibst).

> Vor 25 Jahren habe ich das mal in Pascal programmiert- aber das hilft 
> mir heute nicht weiter.

Ich hätte ehrlich gesagt damals schon die Daten zu zeilenweisen
Datensätzen zusammengefasst; aber auch das hilft Dir heute nicht weiter. :-/

> Wollte nur wissen ob sich dieses Problemchen mit LO erschlagen ließe. 

Erschlagen lässt sich fast alles. Die Frage ist höchstens, wie und mit
welchem Aufwand; bzw. wie komfortabel, und welche Ausnahme- oder
Fehlersituationen ggf. abgefangen werden sollen.

Wolfgang
-- 


-- 
Liste abmelden mit E-Mail an: users+unsubscr...@de.libreoffice.org
Probleme? 
http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert

Antwort per Email an