Hallo,
ich habe ein interessantes Problem zu lösen.
In einem Keller mit 5 Räumen und 100 Regalen habe ich mehrere tausend Akten von mehren hundert verschiedenen Personen.
Es gibt 5 verschiedene Regalmodelle. Die Dinger haben 3 bis 6 Regalbretter und 4 bis 5 "Spalten". Die Regale sind durchnummeriert, also 1 bis 100 (wobei es auch Lücken gibt, z. B. ist Regal 55 entfernt worden), die Regalbretter sind von 1 (unten) bis 3, 4 oder 5 durchnummeriert und dann gibt es eben die Spalten in den Regalen. Also es passen 4 oder 5 Aktenstapel nebeneinander. Je nach Modell. Die Regale sind alphabetisch geordnet, aber nicht streng, denn es kann z. B. sein, dass später eine Person hinzugefügt worden ist, die gleich 3 Regalbretter mit Akten befüllt, aber dafür war nicht genug Platz. Dann wurde sie u. U. ins letzte Regal hineingelegt.
In einem OO Calc Grid habe ich in einem Register alle Namen mit ihren Positionen (Regalnummer, Regalbrett, "Spalte") hinterlegt. Auf einem Brett in einer Spalte können manchmal auch Akten von zwei oder mehreren verschiedenen Personen liegen. Kommt vor aber nicht oft.
In einem zweiten Register in der Datei habe ich die Regale grafisch nachgebildet.
Siehe Anlage dazu.
Jetzt will ich mit einem Makro die Aktenliste von Anfang bis Ende durchgehen und die Regalgrafiken automatisch befüllen lassen.
Damit kann ich mir dann für jedes Regal eine Seite drucken lassen, die ich dann an das Regal hänge und so findet man die Akten schneller wieder (oder man geht die Liste durch und findet sie anhand dessen - ich brauche beides).
Wenn in einem Fach Akten von zwei oder mehr Personen liegen, so soll jede Person mit einem Umbruch angefügt werden.
Im Prinzip nicht schwierig, aber mich würde das etliche Stunden Einarbeitung kosten. Kann mir jemand helfen?
Der erste Schritte, wäre in der Aktenliste im ersten Datensatz Regal (Shelf) und Regalbrett (Board) zusammenzufügen zur gleichen Syntax wie in der Regalgrafik, also. z. B. S1_3 für Regal (Shelf) 1 und Brett 3. Dann die Nummer der Spalte auslesen und zu schauen, ob da schon was drinsteht. Wenn ja, den neuen Namen mit Umbruch anfügen, wenn nein einfach den neuen Namen hineinschreiben. Nächster Datensatz etc.
Wo ich noch keine clevere Idee habe: Wie drucke ich 100 Regale auf je einer Seite aus? Gibt es in Calc soetwas wie einen manuellen Seitenumbruch?
Vielen Dank,
R
Makro für "Seriendruck" innerhalb von Excel
Moderator: Moderatoren
Makro für "Seriendruck" innerhalb von Excel
- Dateianhänge
-
- Aktenarchiv.ods
- (9.3 KiB) 71-mal heruntergeladen
-
- *****
- Beiträge: 355
- Registriert: So, 09.05.2010 12:37
Re: Makro für "Seriendruck" innerhalb von Excel
Hallo,
muss es ein Macro sein?
Wenn man mal die Fälle, wo in einer Spalte mehr als 2 Namen stehen außen vor lässt, lässt sich das auch mit 2 Hilfsspalten und Formeln erledigen.
1. Hilfsspalte: Platzbezeichnung generieren
="S"&A2&"_"&B2&"_"&C2
2. Hilfsspalte: Namen generieren
=D2&" "&E2
Ausgehend von diesen Daten kannst du über eine SVERWEIS-Funktion diese in deine visuellen Schränke verteilen:
=WENN(ISTNV(SVERWEIS(VERKETTEN($A5;"_";SPALTE()-1);Files.$J$2:$K$6;2;0));"";SVERWEIS(VERKETTEN($A5;"_";SPALTE()-1);Files.$J$2:$K$6;2;0))
Beispieldatei hänge ich mal an...
Das Problem der doppelt belegten Spalten müsste man noch irgendwie lösen.
theindless
muss es ein Macro sein?
Wenn man mal die Fälle, wo in einer Spalte mehr als 2 Namen stehen außen vor lässt, lässt sich das auch mit 2 Hilfsspalten und Formeln erledigen.
1. Hilfsspalte: Platzbezeichnung generieren
="S"&A2&"_"&B2&"_"&C2
2. Hilfsspalte: Namen generieren
=D2&" "&E2
Ausgehend von diesen Daten kannst du über eine SVERWEIS-Funktion diese in deine visuellen Schränke verteilen:
=WENN(ISTNV(SVERWEIS(VERKETTEN($A5;"_";SPALTE()-1);Files.$J$2:$K$6;2;0));"";SVERWEIS(VERKETTEN($A5;"_";SPALTE()-1);Files.$J$2:$K$6;2;0))
Beispieldatei hänge ich mal an...
Das Problem der doppelt belegten Spalten müsste man noch irgendwie lösen.
theindless
- Dateianhänge
-
- Aktenarchiv_Formelbasis.ods
- (10.17 KiB) 82-mal heruntergeladen
Lernbegieriger Nutzer mit (hoffentlich) steigendem Wissen
Re: Makro für "Seriendruck" innerhalb von Excel
Hallo!
Stimmt, an SVERWEIS hatte ich gar nicht gedacht, aber das wäre auch eine Möglichkeit, wobei mir das Makro wesentlich lieber ist, weil es professioneller ist und auch gleichzeitig das Problem löst, wenn ein Regalfach mit zwei oder mehr Personen gefüllt wird.
Grüße
R
Stimmt, an SVERWEIS hatte ich gar nicht gedacht, aber das wäre auch eine Möglichkeit, wobei mir das Makro wesentlich lieber ist, weil es professioneller ist und auch gleichzeitig das Problem löst, wenn ein Regalfach mit zwei oder mehr Personen gefüllt wird.
Grüße
R
Re: Makro für "Seriendruck" innerhalb von Excel
Hallo
Was hat deine Aufgabenstellung mit "Seriendruck" und "Excel" zu tun ?
Und wieso ist "per Makro" per se professioneller ?
Karo
Was hat deine Aufgabenstellung mit "Seriendruck" und "Excel" zu tun ?
Und wieso ist "per Makro" per se professioneller ?
Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Re: Makro für "Seriendruck" innerhalb von Excel
Ich habe 100 Regale und als Endergebnis will ich eigentlich 100 Blatt Papier haben mit jeweils den Inhalten der Regale, die aber in einer Tabelle stehen.
Deshalb Seriendruck.
Makro Professioneller? Nun, weil ich dann auch solche Sachen wie 2 Namen in einem Fach schnell lösen kann, wo ich bei SVERWEIS noch keine Idee hätte ...
Gruß R
Deshalb Seriendruck.
Makro Professioneller? Nun, weil ich dann auch solche Sachen wie 2 Namen in einem Fach schnell lösen kann, wo ich bei SVERWEIS noch keine Idee hätte ...
Gruß R
Re: Makro für "Seriendruck" innerhalb von Excel
Hallo
Hier mal eine Lösung per Pythonscript:
Code:
Im Anhang die Beispielsdatei mit Script.
Karo
Hier mal eine Lösung per Pythonscript:
Code:
Code: Alles auswählen
# -*- coding: utf-8 -*-
from collections import defaultdict
context = XSCRIPTCONTEXT
doc = context.getDocument()
sheets = doc.getSheets()
datasheet = sheets.getByName("Files")
targetsheet = sheets.getByName("Shelves")
NamedRanges = doc.NamedRanges
ElementNames = NamedRanges.getElementNames()
def get_rcoords( namelist ):
rcoords = [(0,0),] #dummy on Index[0]
for name in namelist:
rrange = targetsheet.getCellRangeByName(name)
address = rrange.getRangeAddress()
rcoords.append( [int(address.StartColumn), int(address.EndRow)] )
return rcoords
def relativ( coords, rcoords ):
shelfnumber, row, col = map(int,coords)
cornerpos = rcoords[ shelfnumber ]
return cornerpos[0] + col - 1, cornerpos[1] - row + 1
def data_to_grafic_location():
ocur = datasheet.createCursor()
ocur.gotoStartOfUsedArea( False )
ocur.gotoEndOfUsedArea( True )
dataarray = ocur.getDataArray()
r_coords = get_rcoords( ElementNames )
datadict = defaultdict(list)
for line in dataarray[1:]:
key = line[:3]
datadict[key] += [" ".join( line[-3:]).strip()]
for key, value in datadict.iteritems():
cell = targetsheet.getCellByPosition(*relativ(key, r_coords) )
cell.setString( '\n'.join(value) )
Karo
- Dateianhänge
-
- Aktenarchiv_python.ods
- (11.74 KiB) 95-mal heruntergeladen
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)