En mi documento de indesign tengo alrededor de 250 páginas, cada una de las cuales contiene 1 tabla (1 por página). Lo que estoy tratando de hacer es:
Aquí está mi código hasta ahora:
var doc = app.activeDocument;
var myTable = app.activeDocument.stories.everyItem().tables.everyItem().getElements();
alert(myTable.length)//no. of tables in a document
for(var i=0; i<myTable.length; i++) {
var textFrame = doc.pages[0].textFrames.add();
var string = myTable[i].contents;
textFrame.properties =
{
geometricBounds : [ 0,0,100,100 ],
strokeWidth : 0,
fillColor : "None",
contents : string
};
}
Como se trata de un glosario, las letras serán A,B,C,D..
Por ejemplo, la primera fila de la tabla 1 contiene la cadena "Otro", por lo que en esta página un marco de texto en la esquina superior izquierda dirá la letra A
ACTUALIZACIÓN: Obtenga la primera letra de cada tabla
var myTable = app.activeDocument.stories.everyItem().tables.everyItem().getElements();
alert(myTable.length)//no. of tables in a document
for(var i=0; i<myTable.length; i++)
{
var string = myTable[i].contents[0][0];
alert(string);
}
¡Casi lo tenía allí!
Usé su código como base, y esto es lo que se me ocurrió:
if (parseFloat(app.version) < 6)
getTableInitials();
else
app.doScript(getTableInitials, ScriptLanguage.javascript, undefined, UndoModes.fastEntireScript, "Table Initials to Text Frames");
function getTableInitials() {
var myTable = app.activeDocument.stories.everyItem().tables.everyItem().getElements();
var myTableCount = myTable.length;
for (var i = 0; i < myTableCount; i++) {
var initialLetter = myTable[i].contents[0][0];
var pageName = myTable[i].parent.parentPage.name;
var textFrame = app.activeDocument.pages.itemByName(pageName).textFrames.add();
textFrame.properties = {
geometricBounds: [0,0,100,100],
strokeWeight: 0,
fillColor: "None",
contents: initialLetter
};
}
alert("Finished! Added " + myTableCount + " text frames.");
}
Este script creará un marco de texto con una letra inicial para cada tabla en una sola página. No debería importar el nombre de sus páginas (es decir, números arábigos o romanos, letras, etc.), debería incluirlas todas. También envolví el script en una función para que fastEntireScript
se pueda llamar. Al menos debería darle la cortesía de estar a solo un paso de deshacer el script, en lugar de número de tablas × 2 .
Dado que ha declarado que su documento contiene una tabla por página, no debería haber ningún problema. Sin embargo, si tiene más de una tabla, terminará con varios marcos de texto superpuestos uno encima de otro, cada uno con la letra inicial de la tabla respectiva.
Asegúrese de cambiar las propiedades del marco de texto a su gusto. He incluido parámetros de su código como valores predeterminados (también corregidos strokeWidth
a strokeWeight
).
¡Espero que esto ayude!
Jongware
carriles123
carriles123