Copy link to clipboard
Copied
I want to create 5 small tables in a textframe side by side. So I create them this way:
for(var i = 0; i < 5; i++) {
var table = textFrame.insertionPoints[-1].tables.add();
table.bodyRowCount = 2;
table.columnCount = 1;
table.width = 16;
}
However, this code positions the tables one below the other and not side by side.
I haven't found out so far how I can achieve this. Help very appreciated.
Hi together,
yes—using anchored frames is possible.
Here some code:
...// Text frame selected:
var textFrame = app.selection[0];
// Let's build a text frame with a table somewhere on the spread:
var frameWithTable = app.documents[0].layoutWindows[0].activeSpread.textFrames.add
(
{
geometricBounds : [0,0,100,16],
strokeWidth : 0,
strokeColor : "None",
fillColor : "None"
}
);
// Adding a table:
frameWithTable.insertionPoints[0].tables.add
(
{
bodyRowCount : 2,
Copy link to clipboard
Copied
Hi,
Are you able to do it manually (in GUI)?
Copy link to clipboard
Copied
No! 🙂
I have tried to pack the tables into textframes but that didn't work well.
Copy link to clipboard
Copied
I've done it into auto-resized text frames! Interesting way!
(^/)
Copy link to clipboard
Copied
Hi together,
yes—using anchored frames is possible.
Here some code:
// Text frame selected:
var textFrame = app.selection[0];
// Let's build a text frame with a table somewhere on the spread:
var frameWithTable = app.documents[0].layoutWindows[0].activeSpread.textFrames.add
(
{
geometricBounds : [0,0,100,16],
strokeWidth : 0,
strokeColor : "None",
fillColor : "None"
}
);
// Adding a table:
frameWithTable.insertionPoints[0].tables.add
(
{
bodyRowCount : 2,
columnCount : 1,
width : 16,
contents : ["Cell 1", "Cell 2"]
}
);
// Let's fit the frame to the table:
frameWithTable.fit(FitOptions.FRAME_TO_CONTENT);
// Duplicate and anchor the duplicates to the selected text frame:
for(var n=0;n<5;n++)
{
var dup = frameWithTable.duplicate();
dup.anchoredObjectSettings.insertAnchoredObject
(
textFrame.parentStory.insertionPoints[-1] ,
AnchorPosition.INLINE_POSITION
);
// Maybe we need a separator character between the frames?
textFrame.parentStory.insertionPoints[-1].contents = " ";
}
// Remove the frame we built on the spread:
frameWithTable.remove();
Have fun!
Cheers,
Uwe
Copy link to clipboard
Copied
Uwe or Jarek,
A simple question: How can I find tables that follow and catch them (as an array to be exploited later)?
Only interested by tables groups (2, 3, 4, … tables), not isolated (1) table.
Thanks in advance!
(^/)
Copy link to clipboard
Copied
Hi,
An Array of Tables from anchored textFrames could be called like:
thisTextFrame.textFrames.everyItem().tables
However Uwe's code give us a simple monostructured ones (no isolated...:)
Jarek
PS. Are you detecting Chrome getting frozen while this forum's post editor is fired, guys?
FireFox doing well on my side (Win 10, PC)...
Copy link to clipboard
Copied
Thanks Jarek!
It's the first way for me. I'm working on Uwe's approach.
My 2nd way is to insert tables that follow (as usual in current text) in a new table.
So, I've the same question: How can I find and catch them?
Thanks in advance!
(^/)
I don't use Chrome! 😉
Copy link to clipboard
Copied
Hi Obi-wan,
I'm not sure what you are asking here.
Do you want to track tables that are inserted with inline anchored text frames?
Example
Find all nested tables in the selected text frame.
Where the depth of nesting is 1 . That means find a table that sits inside an anchored text frame.
The first table in the text frame should not count. It is not nested.
We could do:
app.selection[0].textFrames.everyItem().tables.everyItem().getElements();
That would result in an array of 10 tables.
You could add all "regular" tables in the text frame as well:
var tablesArray = app.selection[0].tables.everyItem().getElements();
var nestedTablesArray = app.selection[0].textFrames.everyItem().tables.everyItem().getElements();
nestedTablesArray.concat(tablesArray);
That array would contain 11 tables.
How deep do you want to nest your tables?
Regards,
Uwe
Copy link to clipboard
Copied
Hi Uwe,
I would like to have an answer to this old topic:
I mean: in this topic, I wanted to select the 3 tables that follow in a current text frame so that I can place them, one table per cell, in a new table.
The deal is to "horizontally" place following tables, eventually "marked" with a condition or a specific para style.
The way you propose with "inline" text frames is an excellent other way I take too.
I would like to have the 2 layout options depending on the layout context.
(^/)
Copy link to clipboard
Copied
Hi Obi-wan,
hm yes, that would work either way. Just single out the text with the three tables and work with the special characters that hold the tables. Would you want to get the tables from that text by text.tables.everyItem().getElements() and loop through the array to get the character that you'd like to move? Or would you like to do a Text Search with special character <0016> on the text?
But: Since your case is more special than the OP's one, I suggest we maybe should continue to discuss your problems in a different thread. Let's have the original poster—martine55225436—the say on that.
Regards,
Uwe
Copy link to clipboard
Copied
Uwe,
I answer you and then we could go on on my old topic!
In a layout, I could need to horizontally place following tables but not systematically (for different reasons).
So, my idea is to manually apply a condition to the "table support" para and so "mark the tables to be treated.
When done, I launch the script that loops through the doc to find these "conditional" paras containing each a table!
At this step, 2 options: yours or mine!
Imho, yours could be lighter and more interesting, but it depends on the context!
Maybe, 2 conditions to manage the 2 ways! Of course, in the same script!
I don't want you to write the script. However, your help could be great (Jarek and Kai too!) to validate my code writing!!
Last comment on this point here! Next at: Select several tables …
(^/)
Copy link to clipboard
Copied
Jarek,
I would be very interested by a way to do it!
I thought about 2 ways: insert them into another table or place them into anchored inline text frames!
(^/)
Copy link to clipboard
Copied
Sadly it would be possible for 4, not 5 tables, with the spaning columns feature: Split 4
Copy link to clipboard
Copied
Hi Kai,
The problem with Uwe's way (anchored inline text frames) and yours (span feature) is that we can't correctly control the horizontal space between the tables. It's a reason for me to have the other option!
(^/)
Copy link to clipboard
Copied
Oh we can control the positions.
By using tabulators perhaps.
Regards,
Uwe
Copy link to clipboard
Copied
Yeap! I think too but not really easy! use insets management in the "layout table" could be cooler!
(^/)