hilfdirselbst.ch
Facebook Twitter gamper-media

**********************************************
        Facelifting HDS: Danke für deine Unterstützung!

**********************************************


Waldgeist
Beiträge: 1
15. Feb 2018, 12:03
Beitrag #1 von 2
Bewertung:
(362 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Tabelle ansprechen durch Grep-Suche des ersten Eintrages in einer Tabelle


Hallo zusammen,
ich bin Neuling hierbei und habe folgende Aufgabenstellung:

Meine InDesign Datei enthält viele Tabellen, die unterschiedlich ausgezeichnet werden müssen in vielen Ebenen mit unterschiedlichen Sprachen. Jetzt suche ich eine spezielle Tabellen-Sorte, die ich durch Grep-Suche nach dem ersten Wort in der ersten Zeile identifizieren kann.

Als Basis dient mir das Script von Martin Fischer applyTableStyles.jsx, das grundsätzlich großartig ist.
Mein Ansatz ist folgender:

app.findTextPreferences = NothingEnum.NOTHING;
app.changeTextPreferences = NothingEnum.NOTHING;
app.findGrepPreferences = NothingEnum.NOTHING;
app.changeGrepPreferences = NothingEnum.NOTHING;
app.findGlyphPreferences = NothingEnum.NOTHING;
app.changeGlyphPreferences = NothingEnum.NOTHING;
app.findObjectPreferences = NothingEnum.NOTHING;
app.changeObjectPreferences = NothingEnum.NOTHING;

app.findGrepPreferences.findWhat = "^(Betriebsdaten)$"; //hier definiere ich meinen Suchbegriff, der funktioniert
var _text = app.activeDocument.findGrep(); //und packe ihn in diese Variable.

Jetzt suche ich die Anbindung an das Script von Martin Fischer, der so beginnt:

var d = app.activeDocument;
var myTableStyle = myDisplayDialog ("tauschformat");

/ Dialog zum Erfassen des Tabellenstils
function myDisplayDialog(){
var myDialog = app.dialogs.add({name:"Bitte Format wählen"});
with(myDialog.dialogColumns.add()){
var myTsDropDown = dropdowns.add({stringList: d.tableStyles.everyItem().name, selectedIndex:d.tableStyles.length-1});
}
var myResult = myDialog.show();
if(myResult == true){
var tS = d.tableStyles[myTsDropDown.selectedIndex];
myDialog.destroy();
}
else{
myDialog.destroy();
exit()
}
return tS;
}


Da Document zwar tableStyles supportet, verhakt er sich aber, wenn ich versuche ihn mit meiner Grep-Suche zu verbinden und gibt mir dann "undefined object" aus.

Was muss ich schreiben, damit sich var d auch auf mein Grep-Ergebnis bezieht??

Über Hinweise wäre ich echt dankbar
Top
 
X
Hans Haesler  M  p
Beiträge: 5580
17. Feb 2018, 09:54
Beitrag #2 von 2
Beitrag ID: #562487
Bewertung:
(303 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Tabelle ansprechen durch Grep-Suche des ersten Eintrages in einer Tabelle


Hallo Waldgeist,

herzlich willkommen in der "Adobe InDesign Skriptwerkstatt" auf HilfDirSelbst! :-)

Die Aufgabe ist nicht ganz klar. Doch ich habe mal ein einfaches Testdokument erstellt und dieses Skript gestartet:

Code
app.findGrepPreferences = app.changeGrepPreferences = NothingEnum.NOTHING;  

app.findGrepPreferences.findWhat = "^(Betriebsdaten)$"; //hier definiere ich meinen Suchbegriff, der funktioniert
var _text = app.activeDocument.findGrep(); //und packe ihn in diese Variable.

app.findGrepPreferences = app.changeGrepPreferences = NothingEnum.NOTHING;

alert (_text);

Der Alert zeigt "[object Word],[object Word],[object Word]"

Die drei Vorkommen sind also schon gefunden. Geht es jetzt darum, herauszufinden, welches Tabellenformat zugewiesen ist?

Oder eher: Jeder Tabelle, welche in einer Zelle das Wort "Betriebsdaten" enthält, ein spezielles Format zuzuweisen?

Letzteres könnte so funktionieren:

Code
var d = app.activeDocument; 
var selTableStyle = displayDialog ("Tabellenformate");

app.findGrepPreferences = app.changeGrepPreferences = NothingEnum.NOTHING;

app.findGrepPreferences.findWhat = "^(Betriebsdaten)$"; // hier definiere ich meinen Suchbegriff, der funktioniert
var allFound = d.findGrep(); // und packe ihn in diese Variable.
var nTables = allFound.length;

app.findGrepPreferences = app.changeGrepPreferences = NothingEnum.NOTHING;

// eine Schleife durch das Ergebnis der Grep-Suche
for (var n=0; n<nTables; n++) {
// das Tabellenformat zuweisen
allFound[n].parent.parent.appliedTableStyle = selTableStyle;
}

// Dialog zum Wählen des Tabellenformats
function displayDialog() {
var aDialog = app.dialogs.add({name:"Bitte Format wählen"});
with (aDialog.dialogColumns.add()) {
var tsDropDown = dropdowns.add({stringList:d.tableStyles.everyItem().name, selectedIndex:d.tableStyles.length-1});
}
if (aDialog.show()) {
var tS = d.tableStyles[tsDropDown.selectedIndex];
aDialog.destroy();
}
else {
aDialog.destroy();
exit();
}
return tS;
}

Kurze Erklärung: Ein Fund-Vorkommen (allFound[n]) ist das Wort "Betriebsdaten".
Mit 'parent' bekommt man die Zelle und mit dem zweiten 'parent' die aktuelle Tabelle.

Gruss, Hans
als Antwort auf: [#562437] Top