[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Tabellenspalten nach Suche füllen

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

Tabellenspalten nach Suche füllen

dont_panic
Beiträge gesamt: 137

31. Mär 2015, 08:21
Beitrag # 1 von 6
Bewertung:
(1713 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

ich benötige ein wenig Hilfe bei meinem Problem...

Folgendes habe ich vor:

Ich habe mehrere Tabellen in einem Dokument. Die erste Spalte der Tabellen ist immer mit einer Artikelnummer gefüllt. Ziel des Scriptes soll es sein, die nachfolgenden Spalten mit den richtigen Inhalten zu füllen.

Die Inhalte für die Tabellen (u.a. auch die Artikelnummer) lese ich zu Beginn des Scriptes in ein Array ein. Dann hole ich mir für die Suche die Artikelnummern und die dazugehörigen Inhalte aus dem Array. Das Ganze funktioniert auch, auch die Suche klappt ohne Probleme.

Jetzt mein Problem. Ich finde eine Artikelnummer in der ersten Spalte einer Tabelle. Wie kann ich jetzt die anderen Spalten füllen?




var _aktuelleZeile = 0
var _tabelle1 = 0

for (var i=0; i<=_aktZelle;i=i+4)
{

// Hier suche ich nach den Artikelnummern
app.findTextPreferences = app.changeTextPreferences = NothingEnum.nothing;
app.findTextPreferences.findWhat = _arrayTabelleProdukt;


// Testausgabe – später löschen
alert ("Suchstring " + _arrayTabelleProdukt);

var _ergebnisse = app.activeDocument.findText(true);

// Testausgabe – später löschen
alert ("Anzahl Treffer " + _ergebnisse.length);


for (var j = 0; j<_ergebnisse.length; j++)
{
var _ergebnis = _ergebnisse;

// durch diese Ausgabe sehe ich, das ich am richtigen Rahmen bin. Die Zielrahmen haben den Objektstil "Kind"
alert (_ergebnis.parentTextFrames[0].appliedObjectStyle.name);


Ab hier komme ich nicht mehr weiter. Ich habe meine 1. Artikelnummer gefunden, möchte jetzt die Tabellenzeile aktivieren, um die Spalten mit den Inhalten aus dem Array zu füllen. Durch das Finden der Artikelnummer sollte ich ja eigentlich schon in der richtigen Zeile stehen.


aktuelleZeile = app.selection[0].parent;

_aktuelleZeile.cells[0].contents = _arrayTabelleProdukt;
_aktuelleZeile.cells[1].contents = _arrayTabelleProdukt[i+1];
_aktuelleZeile.cells[2].contents = _arrayTabelleProdukt[i+2];
_aktuelleZeile.cells[3].contents = _arrayTabelleProdukt[i+3];

app.findTextPreferences = app.changeTextPreferences = NothingEnum.nothing;
}

}



Vielen Dank für Eure Mühe.


Gruß
Hubert

OSX 10.12.6, Adobe CS6, CC2015, CC2017, CC2018, CC2019
X

Tabellenspalten nach Suche füllen

Kai Rübsamen
Beiträge gesamt: 4664

31. Mär 2015, 08:56
Beitrag # 2 von 6
Beitrag ID: #538411
Bewertung:
(1682 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hubert,

ich könnte mir vorstellen, dass du eher eine Antwort erhältst, wenn du ein kleines Beispiel und vorallem das komplette Skript (also Einlesen der Inhalte) zur Verfügung stellst.

Gruß Kai Rübsamen


als Antwort auf: [#538409]

Tabellenspalten nach Suche füllen

dont_panic
Beiträge gesamt: 137

31. Mär 2015, 09:37
Beitrag # 3 von 6
Beitrag ID: #538412
Bewertung:
(1663 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

Du hast Recht. Also anbei mein gesamter Code plus der Beispieldatei.


In meiner Testdatei will ich einfach die Zeilen aus der oberen Tabelle nach einer Suche in die untere Tabelle überführen.

In der Live-INDD-Datei werden gleiche Artikelnummern in verschiedenen Tabellen zu finden sein. Daher die Suche. Vom Kunden erhalte ich eine Excel, die ich per Hand ins Indesign importiere und als erstes im Script einlese. Die Zieltabellen bzw. die Rahmen haben einen eigenen Objektstil, damit ich im Suchergebnis die Quelltabelle später auschließen kann (ist noch nicht codiert)

Ich bin noch nicht so fit im scripten. Es mag also durchaus andere Wege geben, das Problem anzugehen.



Beispieldatei:
http://fe.brandportal.de/18cd7e69be2b346b6efa424455b38198/Tabelle%20Script.indd



Code
#target InDesign 

if (app.selection[0].parent.parent.constructor.name == "Table")
{

var _dok = app.activeDocument;
var _tabelle = app.selection[0].parent.parent;
var _zTabelle = _dok.stories[0]

// Anzahl der Zeilen und Spalten für Array auslesen
var _spalten = _tabelle.columns;
var _zeilen = _tabelle.rows;
var _anzZellen = _zeilen.length*_spalten.length;


// Array definieren
var _arrayTabelleProdukt = new Array(_anzZellen);

// Array füllen
var _aktZelle = 0;
for ( var z = 0; z < _zeilen.length; z++ )
{
_aktuelleZeile = _zeilen[z];

for (var s = 0;s < _spalten.length; s++)
{
// Inhalt aus Zelle
_Zelle = _aktuelleZeile.cells[s].contents;

// Zelleninhalt in Array
_arrayTabelleProdukt[_aktZelle] = _Zelle;
_aktZelle = _aktZelle+1;
}
}


// Artikelnummer suchen und füllen der Spalten 2-4
var _aktuelleZeile = 0
var _tabelle1 = 0
for (var i=0; i<=_aktZelle;i=i+4)
{
app.findTextPreferences = app.changeTextPreferences = NothingEnum.nothing;
app.findTextPreferences.findWhat = _arrayTabelleProdukt[i];

var _ergebnisse = app.activeDocument.findText(true);

for (var j = 0; j<_ergebnisse.length; j++)
{
var _ergebnis = _ergebnisse[i];
alert (_ergebnis.parentTextFrames[0].appliedObjectStyle.name);

// ab hier weiss ich nicht mehr weiter :-(
_aktuelleZeile = app.selection[0].parent;



_aktuelleZeile.cells[0].contents = _arrayTabelleProdukt[i];
_aktuelleZeile.cells[1].contents = _arrayTabelleProdukt[i+1];
_aktuelleZeile.cells[2].contents = _arrayTabelleProdukt[i+2];
_aktuelleZeile.cells[3].contents = _arrayTabelleProdukt[i+3];

app.findGrepPreferences = app.changeGrepPreferences = NothingEnum.nothing;
}

}


Danke.


Gruß
Hubert

OSX 10.12.6, Adobe CS6, CC2015, CC2017, CC2018, CC2019


als Antwort auf: [#538411]
(Dieser Beitrag wurde von dont_panic am 31. Mär 2015, 09:50 geändert)

Tabellenspalten nach Suche füllen

Kai Rübsamen
Beiträge gesamt: 4664

31. Mär 2015, 12:35
Beitrag # 4 von 6
Beitrag ID: #538414
Bewertung:
(1576 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hubert,

so wie es aussieht, braucht es das Erzeugen und Füllen eines Arrays gar nicht:
Eine Zeile hat eine Eigenschaft 'contents'. Das Ergebnis ist bereits ein Array.

Keine Ahnung, ob hier noch Fehler drin sind (bin ja hier der fortgeschr. Anfänger), aber bei mir funktioniert folgendes:

Code
// das Dokument im Vordergrund 
var curDoc = app.documents[0];

// dein Mastertextrahmen benötigt einen Namen "Master"
if (curDoc.textFrames.itemByName("Master").isValid) {
var masterFrame = curDoc.textFrames.itemByName("Master");
}
else {
alert ("Du hast keinen Master-Textrahmen");
exit();
}

// die Mastertabelle
var masterTable = masterFrame.tables[0];
// alle Zeilen vom Master
var masterRows = masterTable.rows;
// alle Tabellen im Dokument
var allTables = curDoc.stories.everyItem().tables.everyItem();
// zurücksetzen der Sucheinstellungen
app.findTextPreferences = app.changeTextPreferences = null;

// eine Schleife durch die "Masterzeilen"
for (var i = 1; i < masterRows.length; i++) {
// ab der 2. Zeile
var curRow = masterRows[i];
// der Inhalt der 2. bis letzten Zelle
var cont = curRow.cells.itemByRange(1,-1).contents[0];
// der Inhalt der ersten Zelle für die Suche
var toSearch = curRow.contents[0];
// die Suche der entsprechenden Artikelnummer
app.findTextPreferences.findWhat = toSearch;
// hiermit werden alle Tabellen durchsucht. Hat eine Tabelle keine Fundstelle, wird ein leeres Array erzeugt
var allFounds = allTables.findText();

// eine Schleife durch die Fundstellen
for (var n = 0; n < allFounds.length; n++) {
// aktuelle Fundstelle
var tableFound = allFounds[n];
// wenn das Array nicht leer ist
if (tableFound.length > 0 && tableFound[0].parent.parent.parent.name != "Master" ) {
// hiermit werden auch mehrere gleiche Einträge geändert
for (var j = 0; j < tableFound.length; j++) {
var curCell = tableFound[j].parent;
var cellsToFill = curCell.parentRow.cells.itemByRange(1,-1);
cellsToFill.contents = cont;
} // for
} // if
} // for
} // for

app.findTextPreferences = app.changeTextPreferences = null;


Gruß Kai Rübsamen


als Antwort auf: [#538412]
(Dieser Beitrag wurde von Kai Rübsamen am 31. Mär 2015, 12:40 geändert)

Tabellenspalten nach Suche füllen

dont_panic
Beiträge gesamt: 137

31. Mär 2015, 13:49
Beitrag # 5 von 6
Beitrag ID: #538420
Bewertung:
(1546 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

tausend Dank an den fortgeschrittenen Anfänger...

Es funktioniert. Ich gehe jetzt noch den Code durch, um es auch im Detail nachvollziehen zu können.


Gruß
Hubert

OSX 10.12.6, Adobe CS6, CC2015, CC2017, CC2018, CC2019


als Antwort auf: [#538414]

Tabellenspalten nach Suche füllen

Kai Rübsamen
Beiträge gesamt: 4664

31. Mär 2015, 13:52
Beitrag # 6 von 6
Beitrag ID: #538421
Bewertung:
(1543 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Na das freut mich aber :)

Tipp: Geh das Ganze im ESTK Schrittweise durch und schau dir im Datenbrowser an, was jeweils in den Variablen ankommt.

Gruß Kai Rübsamen


als Antwort auf: [#538420]
X

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
05.02.2021 - 05.11.2021

Digicomp Academy AG, Limmatstrasse 50, 8005 Zürich
Freitag, 05. Feb. 2021, 13.00 Uhr - Freitag, 05. Nov. 2021, 17.00 Uhr

Lehrgang

Bilden Sie sich zum zertifizierten Publishing-Multimedia-Profi aus. Neben Fotografie und Video befassen Sie sich mit der Medienproduktion, digitalen Publikationen und dem Webdesign für Desktop- und mobile Endgeräte.

Preis: CHF 10'500.-
Dauer: 30 Tage (ca. 210 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt

Ja

Organisator: Digicomp Academy AG

Kontaktinformation: Kundenberater-Team, E-Mailkundenberatung AT digicomp DOT ch

digicomp.ch/d/9PM

Veranstaltungen
30.07.2021

Chur, SNF Academy Birol Isik
Freitag, 30. Juli 2021, 07.45 - 20.00 Uhr

Onlinekurs

Digitalisierung Chancen & Herausforderungen CRM / Kundenbetreuung Produkte digitalisieren Unternehmenskommunikation Content Publishing

Ja

Organisator: Birol Isik

Kontaktinformation: Birol Isik, E-Mailinfo AT snfa DOT ch

https://www.snfa.ch/fitness-training-schweiz