Seite 1 von 1

Makro für "Seriendruck" innerhalb von Excel

Verfasst: Fr, 25.05.2012 14:29
von Reginald
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

Re: Makro für "Seriendruck" innerhalb von Excel

Verfasst: Fr, 25.05.2012 14:58
von theindless
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

Re: Makro für "Seriendruck" innerhalb von Excel

Verfasst: Fr, 25.05.2012 15:32
von Reginald
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

Re: Makro für "Seriendruck" innerhalb von Excel

Verfasst: Fr, 25.05.2012 16:14
von Karolus
Hallo
Was hat deine Aufgabenstellung mit "Seriendruck" und "Excel" zu tun ?
Und wieso ist "per Makro" per se professioneller ?

Karo

Re: Makro für "Seriendruck" innerhalb von Excel

Verfasst: Fr, 25.05.2012 17:57
von Reginald
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

Re: Makro für "Seriendruck" innerhalb von Excel

Verfasst: Sa, 26.05.2012 09:57
von Karolus
Hallo

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) )
Im Anhang die Beispielsdatei mit Script.

Karo