Copy link to clipboard
Copied
How do I navigate a table and add data to it? For instance:
var hero = ['Superman', 'Spiderman', 'Wonder Woman'];
var fName = ['Clark', 'Peter', 'Diana'];
var lName = ['Kent', 'Parker', 'Prince'];
to
OK, I will tell you my philosophy of developing scripts. For each task, I almost always work with selections. I want to test each piece of my code on a selection if I can. So here, I am don't want to do two things (create a table, then fill it); I only want to test filling a table. So I insert a table, click in the table and test my code.
After I develop and test all of my individual tasks, then I worry about putting the pieces together. I will typically make a function for each task to facilitat
...Copy link to clipboard
Copied
There are a lot of ways you can do this, but here is one way:
#target framemaker
var hero = ['Superman', 'Spiderman', 'Wonder Woman'];
var fName = ['Clark', 'Peter', 'Diana'];
var lName = ['Kent', 'Parker', 'Prince'];
var doc, tbl, row, cell, textLoc;
doc = app.ActiveDoc;
// Click in the table before running this.
tbl = doc.SelectedTbl;
// Populate the heading row.
row = tbl.FirstRowInTbl;
cell = row.FirstCellInRow;
while (cell.ObjectValid () === 1) {
textLoc = new TextLoc (cell.FirstPgf, 0);
if (cell.CellColNum === 0) {
doc.AddText (textLoc, "Hero");
}
else if (cell.CellColNum === 1) {
doc.AddText (textLoc, "First Name");
}
else if (cell.CellColNum === 2) {
doc.AddText (textLoc, "Last Name");
}
cell = cell.NextCellInRow;
}
// Populate the body rows.
row = row.NextRowInTbl;
cell = row.FirstCellInRow;
while (cell.ObjectValid () === 1) {
if (cell.CellColNum === 0) {
populateColumn (cell, hero, doc);
}
else if (cell.CellColNum === 1) {
populateColumn (cell, fName, doc);
}
else if (cell.CellColNum === 2) {
populateColumn (cell, lName, doc);
}
cell = cell.NextCellInRow;
}
function populateColumn (cell, list, doc) {
var counter, textLoc;
counter = 0;
while (cell.ObjectValid () === 1) {
textLoc = new TextLoc (cell.FirstPgf, 0);
doc.AddText (textLoc, list[counter]);
counter = counter + 1;
if (counter === list.length) {
break;
}
cell = cell.CellBelowInCol;
}
}
Copy link to clipboard
Copied
Wow. More complicated than I thought. One initial question, since I am trying to create a new table and then modify that table from within the same script, the following does not make sense.
doc = app.ActiveDoc;
// Click in the table before running this.
tbl = doc.SelectedTbl;
Copy link to clipboard
Copied
OK, I will tell you my philosophy of developing scripts. For each task, I almost always work with selections. I want to test each piece of my code on a selection if I can. So here, I am don't want to do two things (create a table, then fill it); I only want to test filling a table. So I insert a table, click in the table and test my code.
After I develop and test all of my individual tasks, then I worry about putting the pieces together. I will typically make a function for each task to facilitate troubleshooting and reuse.
This methodology has helped me develop thousands of commercial scripts and compile hundreds of reusable functions.