Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

212
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda