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+unsubscribe@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
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.