[GastForen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Forenindex -- Lesezeichen

4 Lesezeichen für tabellen

Tabellenbreite proportional skalieren
Das Script habe ich grade für eine (eigentlich unsympatische) Anfrage im englischen Forum erstellt.
War eh halb fertig ;)
Ich, nicht das Script.
Das war dreiviertelfertig.
Jetzt ist es ganz fertig.

Also dachte ich, hier hat vielleicht auch einer Freude daran:
Es rechnet die Breite einer Tabelle aus (ohne Konturen am Rand) und zeigt diese in einem Dialog an, so dass ich eine neue Breite eingeben kann. Alle Spalten werden dann proportional verbreitert oder -schmälert, um die neue Breite zu erreichen.

Code
tell application "Adobe InDesign CS3" 
set ms to selection
set aTable to parent of item 1 of ms
if class of aTable ? table then
set aTable to parent of aTable
if class of aTable ? table then
display dialog "no table selected"
return
end if
end if

set nC to count columns in aTable
set tWidth to 0.0
repeat with n from 1 to nC
set aWidth to (width of (column n of aTable))
set tWidth to tWidth + aWidth
end repeat

set myDialog to make dialog with properties {name:"Set Width of Table"}
tell myDialog
make dialog column
tell the result
set tNuWidth to make measurement editbox with properties {edit value:(tWidth * 2.83465), edit units:millimeters}
end tell
end tell
set nu to show myDialog
if nu is true then
set nuWidth to (edit value of tNuWidth) * 0.35278
set scaleClm to nuWidth / tWidth
repeat with n from 1 to nC
set aWidth to (width of (column n of aTable))
set width of column n of aTable to (scaleClm * aWidth)
end repeat
else
destroy myDialog
return
end if
end tell

...
Gerald Singelmann
11. Sep 2007, 19:13
|| "Tabelle" finden
Hallo Torben,

Wenn du in der "Text"-Suche nach <0016> suchst findest du die Tabellen. Dann Format ersetzten ...

Bei GREP-Suche funktioniert es allerdings nicht.

Schöne Grüße
Roland
...
drerol74
17. Apr 2012, 13:35
Tabelle: Spaltenbreiten auf alle Tabellen anwenden
Ich habe mich noch mal an die oben geposteten Skripte gemacht und aus den ursprünglich zweien ein Skript gemacht.

Das Vorgehen für das folgende Skript sieht so aus, dass
– erst eine Tabelle markiert wird, aus der die Spaltenbreiten übernommen werden sollen
– dann Skript laufen lassen
– und dabei das Tabellenformat wählen, auf das dokumentweit die Spaltenbreiten aus der ersten Tabelle angewendet werden sollen (Tabellen, die nicht mit dem gewählten Tabellenformat formatiert wurden, bleiben vom Skript unberührt)

Code
//DESCRIPTION: Spaltenbreiten werden von einer markierten Tabelle ausgelesen und auf alle Tabellen, die mit einem bestimmten Tabellenformat formatiert wurden, angewendet. Autor: Karsten Geisler; Kommentare erbeten! design@karsten-geisler.de 
//2012-03-30
#target InDesign

var dasIDDokument = app.activeDocument;
var alleObjekte = dasIDDokument.stories.everyItem().getElements();
var dieSelektion = app.selection[0];

//Spaltenbreiten der gewählten Tabellen werden in die Variable aSpaltenbreiten geschrieben
if (dieSelektion == undefined || dieSelektion.constructor.name != 'Table' ) {
alert('Keine Tabelle ausgewählt\rBitte mit dem Textwerkzeug eine komplette Tabelle auswählen und das Script erneut starten.');
exit();
}
else if ( dieSelektion.constructor.name == 'Table') {
var anzahlKolumnenTab1 = dieSelektion.columns.count();
var kolumnennummerTab1= 0;
var aSpaltenbreitenTab1 = new Array ();
for (var kolumnennummerTab1 = 0; kolumnennummerTab1 < anzahlKolumnenTab1; kolumnennummerTab1 ++ ) {
aSpaltenbreitenTab1.push(dieSelektion.columns[kolumnennummerTab1].width);
}
}

//Dialog, damit User das gewünschte Tabellenformat auswählen kann, auf das die augenommenen Spaltenbreiten angewendet werden
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.INTERACT_WITH_ALL;
var dialog = app.dialogs.add();
dialog.name = "Tabellenformat der Auswahl zuweisen";
var dialogCol = dialog.dialogColumns.add();
var dialogText = dialogCol.staticTexts.add();
dialogText = "Wählen Sie ein Tabellenformat aus:";
var dropDownListe = dialogCol.dropdowns.add();
dropDownListe.stringList = app.activeDocument.tableStyles.everyItem().name;
var zeigeDialog = dialog.show();
if (zeigeDialog && dropDownListe.selectedIndex > -1 && app.selection.length == 1) {
var ausgewaehltesTabellenFormat = app.activeDocument.tableStyles[dropDownListe.selectedIndex].name;
}
dialog.destroy();

//Spaltenbreiten werden übertragen
for (var i = 0; i < alleObjekte.length; i++) {
for (var k = 0; k < alleObjekte[i].tables.length; k++) {
if (alleObjekte[i].tables[k].appliedTableStyle.name == ausgewaehltesTabellenFormat) {
var tab2 = alleObjekte[i].tables[k];
var anzahlKolumnenTab2 = tab2.columns.count();
var kolumnenAnzahlMin = Math.min(anzahlKolumnenTab1,anzahlKolumnenTab2) ;
var kolumnennummer = 0;
for (kolumnennummer = 0; kolumnennummer < kolumnenAnzahlMin; kolumnennummer ++ ) {
tab2.columns[kolumnennummer].width = aSpaltenbreitenTab1[kolumnennummer]*1;
}
}
}
}


Viele Grüße
Karsten

PS: 1000 Dank an Gregor für sein super Buch ;-)
...
Karsten Geisler
30. Mär 2012, 18:01
Tabellenbreite proportional skalieren
Hallo Gerald,

aus aktuellem Anlaß (weil ich's grad selbst so brauche), habe ich in Deinem Skript eine kleine Modifikation gemacht:

Wenn die Tabelle in einem Textrahmen platziert ist, wird im Dialogfeld die Breite des Textrahmens als Ziel für die Gesamtbreite der Tabelle vorgeschlagen.

Andernfalls (z.B. wenn die Tabelle in einer Tabellenzelle platziert ist) wird weiterhin, wie in Deinem Skript, die aktuelle Tabellenbreite eingeblendet.

Code
bGoOn = true; 
aTable = app.selection[0];
if (aTable.constructor.name != "Table") {
aTable = aTable.parent;
if (aTable.constructor.name != "Table") {
aTable = aTable.parent;
if (aTable.constructor.name != "Table") {
alert("Es muss ein Text in einer Zelle markiert sein");
bGoOn = false;
}
}
}
if (bGoOn) {
nc = aTable.columns.length;
tWidth = 0.0;
for (n=0; n < nc; n++) {
tWidth += aTable.columns[n].width;
}
// die Tabelle befindet sich in einem Textrahmen
if (aTable.parent.constructor.name == "TextFrame") {
tfBounds = aTable.parent.geometricBounds;
// vorgeschlagener Wert für die Gesamtbreite der Tabelle = Breite des Textrahmens
myValue = tfBounds[3] - tfBounds[1];
}
else {
// vorgeschlagener Wert für die Gesamtbreite der Tabelle = aktuelle Tabellenbreite
myValue = tWidth;
}
var myDialog = app.dialogs.add({name:"Tabellenbreite"});
with(myDialog.dialogColumns.add()){
var nuWidthField = measurementEditboxes.add({editValue:(2.83465 * myValue), editUnits:MeasurementUnits.millimeters, smallNudge:0.5});
}

var myResult = myDialog.show();
if(myResult == true){
var nuWidth = nuWidthField.editValue * 0.35278;
myDialog.destroy();
scaleClm = nuWidth / tWidth;
for (n=0; n < nc; n++) {
aTable.columns[n].width = scaleClm * aTable.columns[n].width;
}
}
else{
myDialog.destroy();
}
}

...
Martin Fischer
17. Sep 2007, 09:25

Veranstaltungen

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen. pdf-icon Hier eine kleine Anleitung.

Veranstaltungen
26.03.2019

Vorstellung der neuen Version des Farbservers

Impressed GmbH, Hamburg
Dienstag, 26. März 2019, 10.00 - 11.00 Uhr

Webinar

Vor kurzem hat ColorLogic die neueste Version seines Farbservers ZePrA 7 veröffentlicht. In diesem knapp ein-stündigen Webinar stellen Ihnen Dietmar Fuchs, Produktmanager von ColorLogic und Karsten Schwarze, Produktmanager bei Impressed die neuen Funktionen vor.

Kostenloses Webinar

Ja

Organisator: Impressed GmbH

Kontaktinformation: Detlef Grimm, E-Mailschulungen AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=271

ColorLogic ZePrA 7 - die Neuerungen
Veranstaltungen
03.04.2019 - 04.04.2019

Messe Zürich, Halle 7
Mittwoch, 03. Apr. 2019, 09.00 Uhr - Donnerstag, 04. Apr. 2019, 17.30 Uhr

Messe

Seit nun schon zehn Jahren ist die SOM für Entscheider ein fester Begriff – nicht nur in der Schweiz. Geballtes Insiderwissen, Trends und Innovationen, Business-Kontakte: Treffen Sie auf die Profis aus den Bereichen eBusiness, Online Marketing und Direct Marketing! Von Global Playern über nationale Agenturen und Dienstleister bis hin zu Start-ups und Branchenverbänden sind die prägenden Unternehmen und Organisationen vor Ort. Ein prall gefülltes Programm mit Vorträgen, Workshops und Masterclasses bietet Einblicke in die neusten Entwicklungen und aktuellen Herausforderungen. Entdecken Sie innovative Produkte oder Dienstleistungen und profitieren Sie vom Know-how der Experten! Überzeugen Sie sich selbst vom lebendigen Schweizer eBusiness- und Marketing-Geschäft und merken Sie sich jetzt schon den 3. und 4. April 2019 vor. Denn dann findet die elfte Auflage der SOM statt – wie gewohnt in der Messe Zürich.

Nein

Organisator: boerding exposition SA