Seite 1 von 1

Re: Verbundene Zellen in eine Zelle umwandeln

Verfasst: Mi, 29.02.2012 18:36
von Karolus
Hallo
Ich hab eine Rückfrage - repräsentiert das angehängte Beispiels-Dokument deine Problemstellung?
Vorher_Nachher_beispiel.ods
(11.92 KiB) 86-mal heruntergeladen
Karo

Re: Verbundene Zellen in eine Zelle umwandeln

Verfasst: Di, 06.03.2012 10:42
von Feelisreal
Hallo Karo,
vielen Dank. Dein Beispiel gibt die Problematik ganz gut wieder. Es kommt noch hinzu, dass auch leere Zellen möglich sind (siehe Beispiel). Außerdem ist mir jetzt aufgefallen, dass eine änderung des Anordnungsmusters einer Seite in meinem ursprünglichen PDF-File entspricht und somit die Spaltenüberschrift dann immer wieder auftaucht (siehe Beispiel). Diese Zeilen automatisiert zu löschen ist ja nicht schwer. Ich dachte nur, dass das umgekehrt vielleicht hilfreich sein könnte?

Danke und Gruß

Felix

Re: Verbundene Zellen in eine Zelle umwandeln

Verfasst: Di, 06.03.2012 13:05
von miesepeter
Hallo,

die einzige Möglichkeit, die ich früher für eine problematische PDF-Tabelle fand, vernünftig in eine Calc-Tabelle umzuwandeln, war mit Hilfe des OCR-Programms Abbyy Finereader. Das Programm kostet aber Geld. Ob das eine Alternative für dich ist?

Ciao und viel Erfolg

Re: Verbundene Zellen in eine Zelle umwandeln

Verfasst: Di, 06.03.2012 15:41
von Karolus
Hallo
Folgendes Script löscht alle leeren und verdeckte Zellen im markierten Bereich, und verschiebt die Zeile rechts dieser Zellen nach links.

Code: Alles auswählen

context = XSCRIPTCONTEXT


def rangeselection():
    doc = context.getDocument()
    sel = doc.getCurrentSelection()
    sheet  = sel.getSpreadsheet()
    return doc , sel , sheet




def normalize_merged_area():
    """
    hebt die Zusammenfassung von Zellen
    in einer Zeile auf und verschiebt die Zeile
    rechts davon nach links
    """
    doc, sel, sheet = rangeselection()
    cell = sheet.getCellByPosition
    address = sel.getRangeAddress()
    scol, ecol = address.StartColumn, address.EndColumn
    srow, erow = address.StartRow, address.EndRow
    for row in range(srow, erow+1):
        notmerged = [ col for col in range(scol, ecol+1)
                      if not (cell(col, row).getIsMerged()
                      or cell(col,row).getString())]
        for c in notmerged[::-1]:
            sheet.removeRange(cell(c,row).getRangeAddress() , 2) 
                   # 2  < css.sheet.CellDeleteMode.LEFT   ^^^^^
            
Testen kannst du mit dem angehängten Beispielsdoc
Zeilenweise_normalisieren.ods
(13.68 KiB) 86-mal heruntergeladen
Karo

Re: Verbundene Zellen in eine Zelle umwandeln

Verfasst: Do, 22.03.2012 17:49
von Feelisreal
Hallo zusammen,
vielen Dank schonmal Karo. Bin erst jetzt dazu gekommen, dass ganze mal auszuprobieren. Leider bin ich an ziemlich einfachen aber grundlegenden Fragen gescheitert, die ich auch mit Hilfe von Google nicht lösen konnte. Wie genau kann ich dieses Script jetzt in meiner Datei als Makro ausführen? Habe zuerst versucht das Script (handelt es sich um ein BASIC? Bin da völlig grün hinter den Ohren) in meinem Dokument bei den Makros als neues Makro einzufügen. Da fand OO jedoch einige Fehler. Habe dann die Beispieldatei geöffnet (die war schon normalisiert?!) und versucht das Scribt von dort zu kopieren. Leider zeigt OO mir in "Macro-Manager" nur das Standartmodul an in dem sich nur der Main script befindet. Den habe ich auch schonmal in meine Datei eingefügt und ausgeführt. Nach einer viertelstunde Sanduhr habe ich es dann aber aufgegeben. Ich würde mich sehr freuen, wenn du mir eine Schritt-für-Schritt Erklärung geben könntest, wie ich das Script in meine Datei bekomme. Ein Link zu einer Erklärung würde auch schon reichen. Ich habe keinen gefunden, da ich ja gar nicht weiß um welche Art von Script es sich hier handelt.

Liebe Grüße und vielen Dank für das Script

Felix

Re: Verbundene Zellen in eine Zelle umwandeln

Verfasst: Do, 22.03.2012 19:44
von Karolus
Hallo

Entschuldige, die Sub 'Main' war nur ein kurzer erfolgloser Test in Basic, ich hab schlicht vergessen das Teil zu löschen.

Das eigentliche Script ist in Python geschrieben, und sollte auch bei dir ausführbar sein***, über :
→Extras→Makros→Makros ausführen..→zeilenweise_normalisieren→normalize.py→normalize_merged_area
oder alternativ:
→Extras→Makros→Makros verwalten→Python→zeilenweise_normalisieren→normalize.py→normalize_merged_area >'ausführen' <

Falls das funktioniert kannst du damit auch in gleichzeitig geöffneten anderen .ods Dateien arbeiten.

***vorher bitte den ganzen Bereich markieren der zusammengefasste Zellen enthält.
Habe zuerst versucht das Script (handelt es sich um ein BASIC? Bin da völlig grün hinter den Ohren) in meinem Dokument bei den Makros als neues Makro einzufügen. Da fand OO jedoch einige Fehler.
Python-quellcode kann nicht vom Basic-interpreter ausgeführt werden.
Ich würde mich sehr freuen, wenn du mir eine Schritt-für-Schritt Erklärung geben könntest, wie ich das Script in meine Datei bekomme.
Wie bereits oben geschrieben, ist das Script auch aus anderen Dateien benutzbar, solange die Scriptdatei geöffnet ist.
Ansonsten kannst du im Ordner 'Scripts' deiner Benutzerconfiguration ( siehe →Extras→Optionen→OOo→Pfade '....3/user/Scripts ) einen Ordner 'python' anlegen und dort eine Datei 'name_deiner_wahl.py' mit dem geposteten Quelltext darin abspeichern. Benutze einen einfachen Texteditor zum Erstellen der .py Datei und achte darauf das alle Zeileneinrückungen so erhalten bleiben wie oben im Quellcode. Danach ist das Script auch unter ~~Meine Makros... zu finden.

Karo

Re: Verbundene Zellen in eine Zelle umwandeln

Verfasst: Mo, 26.03.2012 11:29
von Feelisreal
Genial, das scheint zu funktionieren. Habe gerade mal an ein paar Zeilen getestet und sogar die leeren Zellen bleiben erhalten! Jetzt lasse ich den script gerade mal über den gesammten Datensatz laufen (natürlich eine Kopie, falls was schiefgeht). Das kann jetzt ne Weile dauern. Damit hast du mir allerdings ein paar Tage arbeit erspart. Vielen Dank! Ich finde das ja immer super, wenn man in Foren kostenlose Hilfe von Fachleuten bekommt andererseits bin ich der Meinung, Arbeit sollte vernünftig entlohnt werden. Als Master Student kann ich da finanziell wenig machen, ich habe mir aber überlegt, dass ich mich in Zukunft dafür stark machen will, dass in unseren Forschungsprojekten ein/e Informatiker/in für solche Aufgaben eingestellt wird. So kann ich dann vielleicht auf indirektem Wege etwas zurück geben. Ich schreibe gleich nochmal, wenn ich fertig bin eine kurze Rückmeldung

Re: Verbundene Zellen in eine Zelle umwandeln

Verfasst: Mi, 04.04.2012 16:26
von Feelisreal
Also nochmal kurze Rückmeldung. Habe das mal den ganzen Tag laufen lassen und hat einwandtfrei funktioniert. Vielen Dank nochmal!!
(P.S: Thema kann meinetwegen geschlossen werden)