Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

215
Views
Cómo importar .xlsx a InDesign

Con el siguiente código, estoy tratando de importar un archivo de Excel a Indesign. Puedo obtener datos, pero si en la tabla hay más de 3 filas, simplemente continúa en línea y no crea una nueva línea.

 var doc = app.activeDocument; // get a text from the XLSX file var inputFile = File("~/Desktop/test.xlsx"); var temp_frame = doc.textFrames.add(); temp_frame.place(inputFile); var text = temp_frame.parentStory.contents; temp_frame.remove(); // make a table from the text text = text.split('\r'); var table = []; for (var row = 1; row < text.length; row++) { table.push(text[row].split('\t')); } // loop through the table and make the cards for (var i = 0; i < table.length; i++) { var title = table[i][0]; var description = table[i][1]; var price = table[i][2]; var card = make_card(title, description, price); // move card to some place card.move([10,10]); card.move(undefined, [i*75, 0]); if(i > 2){ card.move([20,10]); card.move(undefined, [i*75, 20]); } } // the function to create and return a card function make_card(title, description, price) { var doc = app.activeDocument; var title_frame = doc.textFrames.add(); title_frame.geometricBounds = [20, 80, 30, 150]; title_frame.contents = title; var description_frame = doc.textFrames.add(); description_frame.geometricBounds = [30, 80, 80, 150]; description_frame.contents = description; var price_frame = doc.textFrames.add(); price_frame.geometricBounds = [80, 80, 100, 150]; price_frame.contents = price; var group = doc.groups.add([title_frame, description_frame, price_frame]); return group; }

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Mi pregunta es cómo escribir el código que la tarjeta no sale del documento pero sigue en la siguiente línea y también cómo agregar una nueva página automáticamente cuando el documento actual ya está lleno.

Intenté hacerlo con el siguiente código en bucle si el índice es más alto que 2 mover la tarjeta hacia abajo. Lo mueve hacia abajo pero sigue en la misma línea (fuera del documento) y también creo que hay una mejor manera de escribirlo porque si Excel tiene 1000 rors y tengo que configurar esta condición de índice para cada tercer elemento. .. el código será una mezcla

 if(i > 2){ card.move([20,10]); card.move(undefined, [i*75, 20]); }
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Para este caso, la implementación directa más simple podría ser así:

 var doc = app.activeDocument; // get a text from the XLSX file var inputFile = File("~/Desktop/test.xlsx"); var temp_frame = doc.textFrames.add(); temp_frame.place(inputFile); var text = temp_frame.parentStory.contents; temp_frame.remove(); // make a table from the text var rows = text.split('\r'); var table = []; for (var i = 1; i < rows.length; i++) table.push(rows[i].split('\t')); // width and height of cards, gaps, properties of the grid var card_width = 70; var card_height = 80; var gap = 5; var cols = 2; var rows = 3; var cards_per_page = cols * rows; // calculate and add pages var cards = table.length; var pages_to_add = Math.ceil(cards / cards_per_page) - 1; while(pages_to_add--) doc.pages.add(); var page_num = 0; // start page var start_point = [10,10]; // start point for a first card on a page main_loop: for (var i = 0; i < cards; i++) { for (var row = 0; row < rows; row++) { for (var col = 0; col < cols; col++) { // break the loop if there is no more rows in the table if (table.length == 0) break main_loop; var table_row = table.shift(); // take a first row from the table var title = table_row[0]; var description = table_row[1]; var price = table_row[2]; // make a card var card = make_card(title, description, price); // send the card to the some page and move at some place card.move(doc.pages[page_num]); card.move(start_point); card.move(undefined, [(card_width + gap)*col, (card_height + gap)*row]); } } if (i > (page_num-1) * cards_per_page) page_num++; // increase the page number } // the function to create and return a card function make_card(title, description, price) { var doc = app.activeDocument; var title_frame = doc.textFrames.add(); title_frame.geometricBounds = [20, 80, 30, 150]; title_frame.contents = title; var description_frame = doc.textFrames.add(); description_frame.geometricBounds = [30, 80, 80, 150]; description_frame.contents = description; var price_frame = doc.textFrames.add(); price_frame.geometricBounds = [80, 80, 100, 150]; price_frame.contents = price; var group = doc.groups.add([title_frame, description_frame, price_frame]); return group; }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!