[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Text zu Tabelle wandeln per Skript

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

Text zu Tabelle wandeln per Skript

Angelos
Beiträge gesamt: 13

25. Mär 2011, 10:34
Beitrag # 1 von 25
Bewertung:
(6895 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, ich habe folgendes Problem:
Ich möchte aus Text eine Tabelle generieren und der Tabelle ein Tabellenformat zuweisen.

Ich habe dem jeweiligen Text ein Absatzformat zugewiesen.
Jetzt müsste man per Skript dieses Absatzformat suchen und in eine Tabelle umwandeln sowie ein Tabellenformat zuweisen.

Leider kann ich kein Javascript.

Es wäre schön wenn mir einer hier helfen könnte.
Besten Dank

Hier der Beispieltext:

Nummer Schule/Ort Tag/Beginn Uhrzeit Referent/-in Dauer Gebühr
S1030311D1 Karlsruhe, Realschule Sa., 04.06.11 09.30 - 18.00 Dr. Mabuse 1 x 22,00 30,00
S2050011H1 München, Schloss Do., 03.02.11 10.00 - 12.00 Paul Kotz 6 x 35,00 41,50

Der Text ist durch Tabs getrennt. Tabs sollen jeweils eine neue Zelle ergeben.
X

Text zu Tabelle wandeln per Skript

Angelos
Beiträge gesamt: 13

27. Mär 2011, 19:41
Beitrag # 2 von 25
Beitrag ID: #467791
Bewertung:
(6849 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, nachdem ich hier ein bisschen im Forum rumgesucht habe, habe ich ein Skript von Herrn Fischer gefunden mit dem ich einer Tabelle ein Tabellenformat zuweise.
Das funktioniert auch soweit. Leider habe ich nichts dazu gefunden, wie ich Text in eine Tabelle umwandle, per Skript.

Es wäre schön, wenn mir hier einer helfen könnte.

Oder bekommt man das nur in der Premium-Section. Dann würde ich das gerne auch bezahlen.

Angelos


als Antwort auf: [#467671]

Text zu Tabelle wandeln per Skript

Martin Fischer
  
Beiträge gesamt: 12732

27. Mär 2011, 20:07
Beitrag # 3 von 25
Beitrag ID: #467794
Bewertung:
(6843 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Angelos,

schau mal in dieser Diskussion: http://www.hilfdirselbst.ch/..._P462891.html#462891

Oder recherchiere weiter nach Beispielen zu convertToTable().


als Antwort auf: [#467791]
(Dieser Beitrag wurde von Martin Fischer am 27. Mär 2011, 20:08 geändert)

Text zu Tabelle wandeln per Skript

Angelos
Beiträge gesamt: 13

27. Mär 2011, 21:28
Beitrag # 4 von 25
Beitrag ID: #467799
Bewertung:
(6821 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Fischer,

besten Dank. In der Diskussion habe ich das Passende gefunden.

Mein Skript sieht so aus:
Code
// Zurücksetzen der Sucheinstellungen    
app.findGrepPreferences = null;

// Setzen der Sucheinstellungen
app.findGrepPreferences.appliedParagraphStyle = app.documents.firstItem().paragraphStyles.itemByName( '4_Tabelle' );

// Suchen und Ergebnisse in Variable speichern
var result = app.documents.firstItem().findGrep();

// Mit den Fundstellen der Reihe nach rückwärts was machen
for (var i = result.length-1; i >= 0; i--)

// Text in Tabelle umwandeln
var a_table = result[i].convertToTable();

// Zurücksetzen der Sucheinstellungen
app.findGrepPreferences = null;


// applyTableStyles.jsx   
//DESCRIPTION: Weist allen Tabellen eines Dokuments ein ausgewähltes Tabellenformat zu und übernimmt aus dem Tabellenformat die Formate für die Körperzellen.   
// Martin Fischer  
// 10/2008; erweitert 11/2009 
   
var d = app.activeDocument;   
var myTableStyle = myDisplayDialog ();   
   
// Tabellenformat zuweisen   
d.stories.everyItem().tables.everyItem().appliedTableStyle = myTableStyle;   
   
// Abweichungen vom Tabellenformat löschen   
d.stories.everyItem().tables.everyItem().clearTableStyleOverrides( true );   
   
   
// Dialog zum  Erfassen des Tabellenstils   
function myDisplayDialog(){    
    var myDialog = app.dialogs.add({name:"Auswahl Tabellenstil"});    
    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;    
}   


Leider bekomme ich durch das letzte Return in der Tabelle noch eine leere Zeile. Wie kann ich das verhindern bzw. löschen.

Danke


als Antwort auf: [#467794]

Text zu Tabelle wandeln per Skript

Angelos
Beiträge gesamt: 13

28. Mär 2011, 00:38
Beitrag # 5 von 25
Beitrag ID: #467807
Bewertung:
(6807 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich hätte mal die 2 Seite von Thema mir anschauen sollen, dann hätte es gleich geklappt.

So sieht jetzt das funktionierende Skript aus:

Code
// Zurücksetzen der Sucheinstellungen    
app.findGrepPreferences = null;

// Setzen der Sucheinstellungen
app.findGrepPreferences.appliedParagraphStyle = app.documents.firstItem().paragraphStyles.itemByName( '4_Tabelle' );

// Suchen und Ergebnisse in Variable speichern
var result = app.documents.firstItem().findGrep();

// Mit den Fundstellen der Reihe nach rückwärts was machen
for (var i = result.length-1; i >= 0; i--)

{
// zu konvertierenden Text ermitteln
var a_text =(result[i].characters.lastItem().contents == '\r')
? result[i].parentStory.characters.itemByRange(result[i].characters.firstItem().index, result[i].characters.lastItem().index -1)
: result[i];
// Text in Tabelle umwandeln
var a_table = a_text.convertToTable( );
}


// Zurücksetzen der Sucheinstellungen
app.findGrepPreferences = null;




// applyTableStyles.jsx   
//DESCRIPTION: Weist allen Tabellen eines Dokuments ein ausgewähltes Tabellenformat zu und übernimmt aus dem Tabellenformat die Formate für die Körperzellen.   
// Martin Fischer  
// 10/2008; erweitert 11/2009 
   
var d = app.activeDocument;   
var myTableStyle = myDisplayDialog ();   
   
// Tabellenformat zuweisen   
d.stories.everyItem().tables.everyItem().appliedTableStyle = myTableStyle;   
   
// Abweichungen vom Tabellenformat löschen   
d.stories.everyItem().tables.everyItem().clearTableStyleOverrides( true );   
   
   
// Dialog zum  Erfassen des Tabellenstils   
function myDisplayDialog(){    
    var myDialog = app.dialogs.add({name:"Auswahl Tabellenstil"});    
    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;    
}   


Herzlichen Dank


als Antwort auf: [#467799]

Text zu Tabelle wandeln per Skript

cwenet
Beiträge gesamt: 1131

1. Jul 2011, 14:54
Beitrag # 6 von 25
Beitrag ID: #474980
Bewertung:
(6489 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

das Script ist prima.
Ich suche nun noch nach folgender Ergänzung:

Nachdem der Text in eine Tabelle konvertiert wurde, steht die Tabelle ja jetzt in einem eigenen Absatz.
Nun möchte ich diesem Absatz aber noch ein bestimmtes Absatzformat zuweisen.

Wie komme ich denn da dran?

Gruß
Christoph


als Antwort auf: [#467807]

Text zu Tabelle wandeln per Skript

Martin Fischer
  
Beiträge gesamt: 12732

1. Jul 2011, 15:15
Beitrag # 7 von 25
Beitrag ID: #474983
Bewertung:
(6483 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

der Befehl convertToTable() gibt Dir ein Tabellenobjekt zurück.
Eine Tabelle hat eine Eigenschaft storyOffset, die wiederum einen insertionPoint zurückgibt.

Und von da ist nicht mehr weit zum dazugehörigen Absatz (paragraphs.firstItem() ), der ein bestimmtes Format (appliedParagraphStyle) zugewiesen haben möchte.

Kommst Du damit klar?


als Antwort auf: [#474980]

Text zu Tabelle wandeln per Skript

cwenet
Beiträge gesamt: 1131

1. Jul 2011, 15:46
Beitrag # 8 von 25
Beitrag ID: #474984
Bewertung:
(6466 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

danke für Deine Antwort.

Ich habe hier die Skripting-Kurzrefernz von Gregor Fellenz vor mir liegen.
Da finde ich auch alles, was Du genannt hast.

Raus kommt dann bei mir so etwas:

Code
a_table.storyOffset.paragraphs.insertionPoint.appliedParagraphStyle ="Table holder"; 


Was natürlich nicht funktioniert.
Ich weiss nicht, wie man das Objektmodell richtig liest um dann daraus eine Codezeile gewinnt, die auch noch vom Interpreter verstanden wird.

Kannst Du mir hier bitte nochmals helfen?

Danke und Gruß
Christoph


als Antwort auf: [#474983]

Text zu Tabelle wandeln per Skript

Martin Fischer
  
Beiträge gesamt: 12732

1. Jul 2011, 16:47
Beitrag # 9 von 25
Beitrag ID: #474992
Bewertung:
(6439 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Versuch's mal damit:
Code
a_table.storyOffset.appliedParagraphStyle ="Table holder"; 


a_table.storyOffset ist der insertionPoint, an dem die Tabelle sitzt. Und dem kannst Du ein Absatzformat (appliedParagraphStyle) zuweisen, brauchst also nicht bis zum Absatz hochklettern.


als Antwort auf: [#474984]
(Dieser Beitrag wurde von Martin Fischer am 1. Jul 2011, 16:48 geändert)

Text zu Tabelle wandeln per Skript

Kai Rübsamen
Beiträge gesamt: 4679

1. Jul 2011, 16:52
Beitrag # 10 von 25
Beitrag ID: #474993
Bewertung:
(6437 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

ich finde Martin hat es gut beschrieben:
Antwort auf: Eine Tabelle hat eine Eigenschaft storyOffset, die wiederum einen insertionPoint zurückgibt.


D.h. mit der Eigenschaft storyOffset hast du doch bereits schon den InsertionPoint.

Als nächstes brauchst du den Absatz und zwar einen bestimmten, nämlich den ersten, also paragraphs[0].

Funktioniert das?
Code
var t_para = a_table.storyOffset.paragraphs[0]; 
t_para.appliedParagraphStyle = app.documents[0].paragraphStyles.itemByName( 'Table holder' );


edit: Martin war schneller :) Danke für den Hinweis, dass ein InsertionPoint für die Zuweisung vom Format reicht. Warum seit ihr Skripter immer nur so logisch ;-)


als Antwort auf: [#474984]
(Dieser Beitrag wurde von Kai Rübsamen am 1. Jul 2011, 16:54 geändert)

Text zu Tabelle wandeln per Skript

cwenet
Beiträge gesamt: 1131

1. Jul 2011, 16:58
Beitrag # 11 von 25
Beitrag ID: #474994
Bewertung:
(6430 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen Dank Martin,

leider erhalte ich einen Fehler: undefined ist kein Objekt.

Ich zeige Dir am Besten mal das ganze Script.
Vielleicht habe ich es auch nur an falscher Stelle eingebaut.
Da ich mich an die Diskussion einfach drangehängt habe, wäre vielleicht noch die Indesign Version wichtig: CS5, WIN.

Code
// Zurücksetzen der Sucheinstellungen     
app.findGrepPreferences = null;

// Setzen der Sucheinstellungen
app.findGrepPreferences.appliedParagraphStyle = app.documents.firstItem().paragraphStyles.itemByName( 'MeinAbsatz' );

// Suchen und Ergebnisse in Variable speichern
var result = app.documents.firstItem().findGrep();

// Mit den Fundstellen der Reihe nach rückwärts was machen
for (var i = result.length-1; i >= 0; i--)
{
// zu konvertierenden Text ermitteln
var a_text =(result[i].characters.lastItem().contents == '\r')
? result[i].parentStory.characters.itemByRange(result[i].characters.firstItem().index, result[i].characters.lastItem().index -1)
: result[i];
// Text in Tabelle umwandeln
var a_table = a_text.convertToTable();
a_table.storyOffset.appliedParagraphStyle = "Table Holder";
}


// Zurücksetzen der Sucheinstellungen
app.findGrepPreferences = null;




var d = app.activeDocument;
var myTableStyle = "MeineTabelle";

// Tabellenformat zuweisen
d.stories.everyItem().tables.everyItem().appliedTableStyle = myTableStyle;


// Abweichungen vom Tabellenformat löschen
d.stories.everyItem().tables.everyItem().clearTableStyleOverrides( true );


Vielleicht sieht es in CS5 wieder anders aus?

Gruß
Christoph


als Antwort auf: [#474992]

Text zu Tabelle wandeln per Skript

Martin Fischer
  
Beiträge gesamt: 12732

1. Jul 2011, 17:30
Beitrag # 12 von 25
Beitrag ID: #474998
Bewertung:
(6408 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

ich lag knapp daneben.

Der Befehl convertToTable() liefert nicht eine Tabelle, sondern einen Array mit genau einer Tabelle (ich wüßte nicht, wie und wann man mit diesem Befehl einen Array mit mehreren Tabellen erhalten könnte …).

Die Zeile zur Zuweisung des Absatzformats muss also folgendermaßen lauten:

Code
a_table[0].storyOffset.appliedParagraphStyle = "Table Holder"; 



als Antwort auf: [#474994]

Text zu Tabelle wandeln per Skript

Kai Rübsamen
Beiträge gesamt: 4679

1. Jul 2011, 17:42
Beitrag # 13 von 25
Beitrag ID: #474999
Bewertung:
(6398 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: ich lag knapp daneben.
Der Befehl convertToTable() liefert nicht eine Tabelle, sondern einen Array mit genau einer Tabelle

Wie mans nimmt, bzw. in meiner Variante hättest du recht gehabt?!

Ich hab um euer Beispiel nachzuvollziehen, die erste - einfachere - Variante zum konvertieren genommen, weil ich in der zweiten den Inhalt der for-Schleife nicht verstanden hab …

während in eurer Variante bei a.table.constructor.name als Ergebnis Array ankommt, ist es hierfür:

Code
// Mit den Fundstellen der Reihe nach rückwärts was machen      
for (var i = result.length-1; i >= 0; i--)

// Text in Tabelle umwandeln
var a_table = result[i].convertToTable();

a_table.storyOffset.appliedParagraphStyle = "Table Holder";


a_table.constructor.name als Ergebnis Table??


als Antwort auf: [#474998]
(Dieser Beitrag wurde von Kai Rübsamen am 1. Jul 2011, 17:46 geändert)

Text zu Tabelle wandeln per Skript

cwenet
Beiträge gesamt: 1131

1. Jul 2011, 17:49
Beitrag # 14 von 25
Beitrag ID: #475000
Bewertung:
(6391 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

vielen Dank, so klappt es.

Nun habe ich noch das Problem, dass ich in Abhängigkeit vom Absatzformat auch entsprechend unterschiedliche Tabellenformate zuweisen möchte.

Ich habe jetzt einfach 3 Scripts gemacht und jeweils die Formate abgeändert.
Nun gewinnt bei der Tabellenformat Zuweisung immer das letzte Script, obwohl ja zuvor nach dem speziellen Absatzformat gesucht wird.

Wie kann ich das Ganze noch eingrenzen?

Gruß
Christoph


als Antwort auf: [#474998]

Text zu Tabelle wandeln per Skript

Martin Fischer
  
Beiträge gesamt: 12732

1. Jul 2011, 18:09
Beitrag # 15 von 25
Beitrag ID: #475005
Bewertung:
(6367 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich mach jetzt mal Feierabend und schaue jungen Engländerinnen auf die Füße. ;-)


als Antwort auf: [#475000]
X