[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Inhalte von Tabellenzellen vergleichen und doppelte Werte löschen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Inhalte von Tabellenzellen vergleichen und doppelte Werte löschen

juma68
Beiträge gesamt: 31

17. Dez 2012, 09:19
Beitrag # 1 von 22
Bewertung:
(7119 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin, moin...

ich bastel hier gerade mal wieder an einem Script und steh auf dem Schlauch:
Ich will in meinen Tabellen bestimmte Zellen miteinander vergleichen und dann gleiche Werte löschen. Funktioniert auch so weit alles: ich find die Zellen über ein Scriptetikett, das Script findet die doppelten, löscht sie aber nicht.
Ich wollte eigentlich die Zellen einfach nur mit "nichts" überschreiben, das Script stellt sich aber vor den ersten Eintrag (hab ich getestet indem ich mal einfach mit "000" ersetzt hab).
Den Inhalt bekomm ich ja über Content zu fassen, warum überschreibt er nicht?

Code
/DISCRIPTION: Stellet Tabellenzeilen auf genau, löscht den Rahmen, der die Höhe bestimmt aus Tabelle, passt die Bilder an den Bildrahmen an 

#target Indesign
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.INTERACT_WITH_ALL;

var myDocument = app.activeDocument;
var myObjekte = app.activeDocument.allPageItems;
var myHoehenmass= new Array();
var myTextframes= new Array();
var myGruppen ;
var myBilder = myDocument.allGraphics;
var myStories = myDocument.stories;
var nPages = myDocument.pages.length;


//Tabellenzellen vergleichen
for (var i=0; i < myStories.length; i++){
var myTables = myStories[i].tables;
for (var x=0; x < myTables.length; x++){
var myCells = myTables[x].cells;
var myOldContent = "x";

for ( var y = 0; y < myCells.length; y++){
if (myCells[y].label == "vergleichen") {
var myNewContent = myCells[y].contents;

if (myNewContent == myOldContent){
myCells[y].contents = "";
}
else {
myOldContent=myNewContent;
}
}
}
}
}


Nicht wundern über die anderen Variablen,ist nur der erste Teil eines komplexeren Scripts.

Danke für Eure Hilfe
Juma
X

Inhalte von Tabellenzellen vergleichen und doppelte Werte löschen

Hans Haesler
  
Beiträge gesamt: 5826

17. Dez 2012, 11:40
Beitrag # 2 von 22
Beitrag ID: #505724
Bewertung:
(7081 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Juma,

um das Problem nachvollziehen zu können, sollten wir wenigstens wissen, wie die Tabelle aussieht.
Besser noch: Ein Beispieldokument hochladen. Und: Welche InDesign-Version? Mac oder Win?

Mit meiner einfachen Testtabelle funktioniert das Script wie erwartet.

Erster Versuch: Alle Zellen, welche ein "x" enthalten, sind mit "vergleichen" gelabelt.
Das Script ausführen: Alle "x" sind weg (siehe Anhang "Ergebnis_1.png").

Zweiter Versuch: Ein paar der "x" mit Zahlen ersetzen.
Das Script ausführen: Das erste "x" sowie die Folgewerte sind entfernt (siehe Anhang "Ergebnis_2.png").

Ratschlag: Im Wort DISCRIPTION das erste "I" durch "E" ersetzen: DESCRIPTION.
Dann funktioniert die Quickinfo-Anzeige (Mauszeiger auf den Namen des Scripts richten).

Gruss, Hans


als Antwort auf: [#505697]
Anhang:
Ergebnis_1.png (22.0 KB)   Ergebnis_2.png (24.1 KB)

Inhalte von Tabellenzellen vergleichen und doppelte Werte löschen

juma68
Beiträge gesamt: 31

17. Dez 2012, 13:33
Beitrag # 3 von 22
Beitrag ID: #505733
Bewertung:
(7043 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans...

Sorry, ist Indesign CS5 für Mac. Screenshot leg ich mal bei, Musterdatei ist leider zu groß. Kann ich dir aber per Mail schicken.
Die Zeile Schleppertypen gehört mit zur Tabelle (läuft komplett über weg)


als Antwort auf: [#505724]
Anhang:
Bildschirmfoto 2012-12-17 um 13.33.05.png (137 KB)

Inhalte von Tabellenzellen vergleichen und doppelte Werte löschen

Hans Haesler
  
Beiträge gesamt: 5826

17. Dez 2012, 13:47
Beitrag # 4 von 22
Beitrag ID: #505737
Bewertung:
(7034 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Juma,

leider ist es ohne Beispieldatei nicht möglich, das Problem nachzuvollziehen.

Versuche bitte, einen Export ins ".idml"-Format zu machen:
> Datei > Exportieren... Und als Format den Artikel "InDesign Markup (IDML)" wählen.

Und beschreiben, was genau ablaufen sollte.

Ich muss gleich weg und kann die Sache erst gegen Abend prüfen.

Gruss, Hans


als Antwort auf: [#505733]

Inhalte von Tabellenzellen vergleichen und doppelte Werte löschen

Uwe Laubender
Beiträge gesamt: 5350

17. Dez 2012, 14:54
Beitrag # 5 von 22
Beitrag ID: #505744
Bewertung:
(7000 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, juma68!

Das Problem hängt mit Deinen Tags zusammen. Ein kleiner Versuchsaufbau meinerseits in InDesign CS5.5 v7.5.3 mit Mac OSX 10.6.8 zeigt das:

1.TaggedAndUntaggedTables.png

Die Tabelle oben ist ungetagged, unten der Textrahmen mit der gleichen Tabelle getagged. Die gelabelten Zellen sind zur besseren Übersicht mit "Gelb" eingefärbt. Der einzige Unterschied zwischen den Tabellen sind die Tags.

Wenn ich Dich richtig verstanden habe, sollen doch alle Zellen, die gelabelt sind untersucht werden, ob der Inhalt "x" ist? Falls dies der Fall ist, soll der Inhalt mit "Nichts" ersetzt werden. Richtig, oder?

Führe ich Dein Script mit der oberen Tabelle alleine in einem Dokument aus, dann wird der Ersetzenvorgang korrekt ausgeführt (siehe auch die Ergebnisse von Hans), habe ich hingegen die gleiche Tabelle mit getaggten Inhalten zusätzlich in der Datei, werden die Zellentags entfernt und oben in der ungetaggten Tabelle bleibt ein "einsames" "x" stehen (nicht genau das, was Du möchtest):

2. TaggedAndUntaggedTables_AfterScript_juma68.png


Ich habe mal versucht eine Variante Deines Scripts zu schreiben, die mit dem gesamten Contents der Tabelle arbeitet, diesen als Array rausschreibt (ist gefährlich, für Dich nicht geeignet, da bei Dir z.B. Abbildungen in den Zellen sein könnten), den Array nach den Inhalten untersucht und gegebenenfalls die Inhalte mit "Nichts" ersetzt und dann den Array als Inhalt zurückschreibt. Das Script poste ich mal lieber nicht; nur damit Du eine Idee davon bekommst.

Ergebnis: bei völlig ungetaggten Tabellen innerhalb einer Datei werden die Inhalte sauber durch nichts ersetzt, bei gemischten Dokumenten, werden die Inhalte der ungetaggten Tabellen sauber ersetzt, aber die Zellentags der getaggten Tabellen gelöscht anstelle des Inhalts:

3. TaggedAndUntaggedTables_AfterScript_uwe.png

Tja.

Im Moment weiss ich mir noch keinen Rat wie Dein Problem zu lösen ist…


als Antwort auf: [#505733]
Anhang:
1TaggedAndUntaggedTables.png (53.8 KB)   2TaggedAndUntaggedTables_AfterScript_juma68.png (54.5 KB)   3TaggedAndUntaggedTables_AfterScript_uwe.png (54.8 KB)

Inhalte von Tabellenzellen vergleichen und doppelte Werte löschen

juma68
Beiträge gesamt: 31

17. Dez 2012, 15:41
Beitrag # 6 von 22
Beitrag ID: #505750
Bewertung:
(6987 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe...

Die Tags nerven uns hier eh schon gewaltig beim Arbeiten. Aber leider brauchen wir die, weil wir das Zeugs später in 10 Sprachen übersetzen. Aber so ganz kann es da dran auch nicht liegen. Im gesamten Script suche ich später auch noch nach doppelten Überschriften und lösche diese dann. Das funktioniert auch einwandfrei!

Ich kann dir auch gern mal die Musterdatei und das komplette Script schicken.

Ich habs gerade schon Hans geschrieben (Per Mail). Dickes Lob an euch alle, gerade wenn man da noch lernt und gerade Indesign sich ja auch ab und zu sehr sperrig anstellt. Gäbe es das Forum nicht, hätte ich bestimmt schon lang aufgegeben. Wie man meinen Scripten bestimmt ansieht, lerne ich gerade erst das Laufen. Bis ich den Marathon schaff, bin ich in Rente! ;-)


als Antwort auf: [#505744]

Inhalte von Tabellenzellen vergleichen und doppelte Werte löschen

Uwe Laubender
Beiträge gesamt: 5350

17. Dez 2012, 16:06
Beitrag # 7 von 22
Beitrag ID: #505755
Bewertung:
(6974 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat von juma68 Im gesamten Script suche ich später auch noch nach doppelten Überschriften und lösche diese dann. Das funktioniert auch einwandfrei!


Das könnte an anderen Faktoren liegen: z.B. sind die Überschriften möglicherweise nicht in einer Tabellenzelle gesetzt ;-)

Oder Du suchst/ersetzt mit anderen Mitteln: z.B. mit der InDesign-eigenen GREP- oder TEXT-Suche…

Wobei mich das auf die Idee bringt die Suche/Ersetze-Vorgänge mal mit der TEXT- oder GREP-Suche per Script zu machen!

Da könnte man die Reichweite auf alle Tabellen des Dokuments beschränken und vor dem Ersetzen das Label der Zelle abfragen…
(Bevor wir uns hier noch an den Besonderheiten der XML Tags im Zusammenspiel mit Tabellenzellen abarbeiten)


als Antwort auf: [#505750]

Inhalte von Tabellenzellen vergleichen und doppelte Werte löschen

Uwe Laubender
Beiträge gesamt: 5350

17. Dez 2012, 17:29
Beitrag # 8 von 22
Beitrag ID: #505758
Bewertung:
(6951 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Wenn also das Ziel sein soll, dass *genau* der Zelleninhalt "x" ausschließlich in Tabellenzellen des aktiven Dokuments gelöscht werden soll, wenn das Scriptlabel der Zelle "vergleichen" heißt, dann probiere mal folgendes Script aus.

Die Tags bleiben dabei erhalten. Leere Zellen enthalten auch noch die öffnende/schließende Tagklammer.

So sollte das klappen:

Code
//RemoveText_TablesOfActiveDocumentOnly_XML-TagsRemainIntact.jsx 
//DESCRIPTION:Removes predefined Text in tables only of active Document. XML tags remain intact.
//Uwe Laubender

var myStringToRemove = "x";

var docScope = app.activeDocument;
var cellLabelScope = "vergleichen";

//Was in allen Tabellenzellen gelöscht werden soll:
//GREP
//^ = Anfang Text
// x = dazwischen der String, der gesucht wird. Beispielsweise das Zeichen "x".
//$ = Ende Text

//Anmerkung:
//Nur "x" in der Suche würde auch das "x" im Wort "Extra" finden. Das wollen wir aber nicht.
//Die Tabellenzelle soll ja genau das "x" enthalten; nichts davor, nichts danach!
var myGREP = "^"+myStringToRemove+"$";

//Eine Tabelle kann auch als Textzeichen betrachtet werden.
//Mit einer Textsuche nach diesem String werden alle Tabellen im Dokument gefunden.
//Auch Tabellen, die verschachtelt in Tabellen sind und auch Tabellen in Fußnoten!

var myTableAnchorString = "<0016>";

app.findTextPreferences = app.changeTextPreferences = null;
app.findTextPreferences.findWhat = myTableAnchorString;

var myTableAnchors = docScope.findText();

app.findTextPreferences = app.changeTextPreferences = null;


//Schleife durch alle Tabellenankerzeichen:
for(var n = myTableAnchors.length-1; n >= 0; n--){

//Jeder der Ancherzeichen darf nur eine Tabelle enthalten.
//Diese Abfrage ist gegenwärtig überflüssig, könnte sich ja aber in zukünftigen InDesign-Versionen noch ändern ?!
if(myTableAnchors[n].texts[0].tables.length == 1){

//Die eine Tabelle, abgeleitet vom Tabellenankerzeichen:
var myCurrentTable = myTableAnchors[n].texts[0].tables[0];

app.findGrepPreferences = app.changeGrepPreferences = null;
app.findGrepPreferences.findWhat = myGREP;

//Nur in der aktuellen Tabelle nach dem zu löschenden Ausdruck suchen:
var allMyUnwantedTexts = myCurrentTable.findGrep();

app.findGrepPreferences = app.changeGrepPreferences = null;

//Die gefundenen Textstellen werden durchsucht und geprüft, bevor sie gelöscht werden:
for(var m=allMyUnwantedTexts.length-1; m>=0;m--){

//Zur Sicherheit noch mal die Abfrage, ob wir es wirklich mit Text innerhalb einer Zelle zu tun haben:
//Plus natürlich die Bedingung, dass diese Zelle mit "vergleichen" gelabelt ist.

if(allMyUnwantedTexts[m].parent instanceof Cell && allMyUnwantedTexts[m].parent.label == cellLabelScope){
//Löschen des Textstückes:
//Die XML-markupTags bleiben danach stehen:
allMyUnwantedTexts[m].remove();
};
};

};

};



als Antwort auf: [#505755]

Inhalte von Tabellenzellen vergleichen und doppelte Werte löschen

Hans Haesler
  
Beiträge gesamt: 5826

17. Dez 2012, 18:16
Beitrag # 9 von 22
Beitrag ID: #505759
Bewertung:
(6934 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Juma,

ohne das Script mit dem Musterdokument ausprobiert zu haben, kann ich sagen: Uwe liegt richtig. Mit der Analyse, dass die Tags stören.

Als ich den Anhang im Beitrag #3 sah, entwich mir ein "Autsch", weil die Tags ein Störfaktor sind. Ein ähnliches Problem hatte ich kürzlich bei einer anderen Aufgabe. Aber ich muss das Script zuerst ausgraben, um herauszufinden, wie ich es gelöst hatte.

Ich werde mich im späteren Abend dahintersetzen und sage schon mal ein Dankeschön an Uwe für die Vorarbeiten. :-)

Allerdings entnehme ich dem ersten Script von Juma, dass der Variablen 'myOldContent' immer wieder anderer Inhalt zugewiesen wird. Deshalb kann nicht ein generelles Suchen/Ersetzen durchgeführt werden.

Gruss, Hans


als Antwort auf: [#505758]

Inhalte von Tabellenzellen vergleichen und doppelte Werte löschen

Uwe Laubender
Beiträge gesamt: 5350

17. Dez 2012, 18:44
Beitrag # 10 von 22
Beitrag ID: #505761
Bewertung:
(6914 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat von Hans Allerdings entnehme ich dem ersten Script von Juma, dass der Variablen 'myOldContent' immer wieder anderer Inhalt zugewiesen wird. Deshalb kann nicht ein generelles Suchen/Ersetzen durchgeführt werden.


Hallo, Hans!
Dann verstehe ich nicht ganz wie "immer wieder" definiert ist.

Außerdem: Gibt's denn eine Referenzzelle für den Inhalt, der sonst auf keinen Fall vorkommen darf und die natürlich unangetastet bleiben soll?


als Antwort auf: [#505759]

Inhalte von Tabellenzellen vergleichen und doppelte Werte löschen

Hans Haesler
  
Beiträge gesamt: 5826

17. Dez 2012, 19:50
Beitrag # 11 von 22
Beitrag ID: #505766
Bewertung:
(6884 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

Zitat Dann verstehe ich nicht ganz wie "immer wieder" definiert ist.

So:

Code
if (myCells[y].label == "vergleichen") { 
var myNewContent = myCells[y].contents;
if (myNewContent == myOldContent){
myCells[y].contents = "";
}
else {
myOldContent=myNewContent;
}
}

Also: Wenn der Inhalt der aktuellen "vergleichen"-Zelle mit jenem von 'oldContent' übereinstimmt, dann wird er gelöscht. Sonst wird er 'oldContent' zugewiesen.

Demnach ist der zu löschende Inhalt nicht immer derselbe.

Aber ich muss zuerst versuchen, mit den Original-Dateien herauszufinden, um was es genau geht.

Gruss, Hans


als Antwort auf: [#505761]
(Dieser Beitrag wurde von Hans Haesler am 17. Dez 2012, 21:19 geändert)

Inhalte von Tabellenzellen vergleichen und doppelte Werte löschen

Hans Haesler
  
Beiträge gesamt: 5826

17. Dez 2012, 21:19
Beitrag # 12 von 22
Beitrag ID: #505771
Bewertung:
(6843 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Juma,

ich konzentriere mich nur auf die Aufgabe des Themas: "Zelleninhalte vergleichen und (aufeinanderfolgende) doppelte (= gleiche) Werte löschen".

Mit dem Originalscript und der ebenfalls gelieferten, unveränderten Musterdatei funktioniert das wie vorgesehen. Im Anhang ("vergleichen.png") ein Ausschnitt einer vereinfachten Kopie des Originals.

Die vier sichtbaren Zellen sind alle mit dem Label "vergleichen" versehen. Das Script macht eine Schleife durch die Zellen.

Erste Zelle: Der Inhalt ist anders als das Vorgabe-"x". Deshalb wird der Variablen 'myOldContent' der String "Vergleichs-Nr." zugewiesen.

Zweite Zelle: Wieder ist der Inhalt anders. Und 'myOldContent' wird "4UTNM111100501, 41111005110" zugewiesen.

Dritte Zelle: Dieses Mal ist der Inhalt identisch mit jenem in 'myOldContent'. Also wird die Zelle geleert.

Vierte Zelle: Der Inhalt ist anders als der gespeicherte. Also wird der aktuelle in 'myOldContent' gegeben.

Im Gegensatz zum ersten Screenshot (im Beitrag #3) enthält das Dokument keine Tags. Aber zu Beginn jedes Zelleninhalts sind zwei 0xFEFF-Zeichen eingepflanzt. Um am Ende des Zellentextes ein einzelnes.

Diese Zeichen bleiben sichtbar, wenn Notizen ausgeblendet sind. Aber es sind keine Notizen eingefügt. Dann sind es vielleicht Lesezeichen. Aber im Lesezeichen-Fenster werden sie nicht angezeigt.

Vielleicht kannst Du uns erklären, wie diese Zeichen in den Text gekommen sind.

Wie dem auch sei: Im Gegensatz zu den Tags stören sie das Vergleichen nicht.

Gruss, Hans


als Antwort auf: [#505766]
Anhang:
vergleichen.png (41.7 KB)

Inhalte von Tabellenzellen vergleichen und doppelte Werte löschen

Uwe Laubender
Beiträge gesamt: 5350

17. Dez 2012, 21:45
Beitrag # 13 von 22
Beitrag ID: #505772
Bewertung:
(6831 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat von Hans Aber zu Beginn jedes Zelleninhalts sind zwei 0xFEFF-Zeichen eingepflanzt. Um am Ende des Zellentextes ein einzelnes.


Hallo, Hans!

0xFEFF-Zeichen?

Ich zitiere mal aus Marc Autrets Sammlung der Sonderzeichnen im "en_InDesignCS4-CS5-SpecialChars.pdf", Seite 3:

Zitat von Marc Autret
Index Marker, Note Marker, Conditional Text Marker

U+FEFF ZERO WIDTH NO-BREAK SPACE

NB. — Notes and Conditional Text markers are encoded U+FEFF too, but it sounds this character can only ‘match’ index anchor.



als Antwort auf: [#505771]

Inhalte von Tabellenzellen vergleichen und doppelte Werte löschen

juma68
Beiträge gesamt: 31

18. Dez 2012, 10:20
Beitrag # 14 von 22
Beitrag ID: #505791
Bewertung:
(6778 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo ihr zwei...

mit diesen 0xFEFF-Zeichen hatte ich auch schon mal Ärger. Die entstehen wohl durch das Tool, mit dem wir unsere Datenbank mit dem Dokument verknüpfen (EasyCatalog). Das hat schon was mit den Tags zu tun. Ich denken, da das nicht direkt aus dem Indesign kommt, interpretiert Indesign als 0xFEFF-Zeichen.
Ich hab letztens in einem Dokument Links zum Webshop erstellt und hatte zu Anfang keinen Erfolg, weil in der URL immer dieses Zeichen drin war. Aber ich konnte es suchen und löschen und danach war gut.
Ich guck mal nach was ich gesucht habe, vielleicht reicht eine einfache Suche nach dem Zeichen vorweg und alles funzt....

Ich meld mich dazu gleich nochmal...

Jutta


als Antwort auf: [#505772]

Inhalte von Tabellenzellen vergleichen und doppelte Werte löschen

Martin Fischer
  
Beiträge gesamt: 12885

18. Dez 2012, 10:36
Beitrag # 15 von 22
Beitrag ID: #505795
Bewertung:
(6773 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jutta,

wenn Du die contents der Zellen vergleichst, könntest Du doch die contents abzüglich dieser 0xFEFF-Zeichen (etwa: .contents.replace(/\uFEFF/g, '') ) vergleichen. Dann sollten Sie nicht mehr stören.

Also etwa so (als Ausgangspunkt):
Code
var myNewContent = myCells[y].contents.replace(/\uFEFF/g, ''); 

Oder sind diese Zeichen so nicht zu fassen?


als Antwort auf: [#505791]
(Dieser Beitrag wurde von Martin Fischer am 18. Dez 2012, 10:42 geändert)
X