Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


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.