Lista a tabs
Transformación de Lista a Documentos Individuales en Google Sheets
Preparativos Iniciales
-
Crear una Pestaña con la Lista: Esta pestaña contendrá tu lista tipo diario o mayor, donde cada fila se corresponde con los datos de un documento específico.
-
Diseñar una Plantilla de Documento: En otra pestaña, elabora una plantilla del documento que deseas generar. Asegúrate de numerar adecuadamente cada campo relevante en la cabecera, esto servirá más adelante para mapear los datos correctamente.
-
Visualizar Ejemplos de la Configuración: Observa los siguientes ejemplos visuales para tener una idea clara de cómo estructurar tus pestañas de lista y plantilla.
- Configuración de la Lista:
- Ejemplo de Plantilla:
Implementación del Script
Para iniciar el proceso de generación automática de documentos:
- Dirígete a
Extensiones > App Script. - En el entorno de App Script, prepara y ejecuta el siguiente código:
Codigo App Script asociado
function generarFacturas() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var templateSheet = ss.getSheetByName("NombrePlantilla"); // Cambia esto por el nombre real de tu pestaña de plantilla
var dataSheet = ss.getSheetByName("LibroFacturasEmitidas"); // Asegúrate de usar el nombre correcto de tu hoja de datos
var dataRange = dataSheet.getDataRange();
var data = dataRange.getValues();
for (var i = 6; i < data.length-1; i++) { // Empieza en 1 para omitir el encabezado data.length
var invoiceData = data[i];
var newSheet = ss.insertSheet(invoiceData[4]); // Usa un identificador único para cada factura, aquí se usa el número de factura
templateSheet.getRange('A1:Z100').copyTo(newSheet.getRange('A1'), {contentsOnly:false});
// Ajusta las columnas y las filas al tamaño de la plantilla
var maxColumns = newSheet.getMaxColumns();
var maxRows = newSheet.getMaxRows();
if(maxColumns > 5) { // Si hay más de 5 columnas, elimina las excedentes
newSheet.deleteColumns(6, maxColumns - 5);
}
if(maxRows > 24) { // Si hay más de 24 filas, elimina las excedentes
newSheet.deleteRows(25, maxRows - 24);
}
// Copia la anchura de las columnas de la plantilla a la nueva hoja
var numColumns = templateSheet.getMaxColumns();
for (var j = 1; j <= numColumns; j++) {
var columnWidth = templateSheet.getColumnWidth(j);
newSheet.setColumnWidth(j, columnWidth);
}
// Aquí, reemplaza los datos de la plantilla con los de invoiceData usando setValues() o setValue()
// Por ejemplo: newSheet.getRange('B12').setValue(invoiceData[1]); donde B2 es donde va el nombre del cliente
// Repite para cada dato relevante de la factura
//nombre
//newSheet.getRange('B12').setValue(invoiceData[14]);
newSheet.getRange('B12').setValue(invoiceData[15]); // Supongamos que esto es el Nombre/Razón Social
newSheet.getRange('B13').setValue(invoiceData[14]); // NIF
newSheet.getRange('B14').setValue(invoiceData[5]); // Dirección (ajustar según corresponda)
newSheet.getRange('C12').setValue(invoiceData[0]); // Número de Factura
newSheet.getRange('C15').setValue(invoiceData[2]); // Fecha de Factura
newSheet.getRange('B19').setValue(invoiceData[6]); // Concepto de Factura
newSheet.getRange('D19').setValue(invoiceData[7]); // Base Imponible
//newSheet.getRange('F20').setValue(invoiceData[7]); // % IVA
//newSheet.getRange('F21').setValue(invoiceData[11]); // Total IVA
}
SpreadsheetApp.flush(); // Asegura que todos los cambios se apliquen antes de finalizar el script
}
Consejos para la Implementación:
- Pruebas Iniciales: Para las primeras ejecuciones, limita el bucle
forpara procesar solo 2 o 3 filas. Esto facilita ajustar los mapeos - Refactorización: desaconsejo refactorizar al estar claros los bloques y ser personalizados en cada uso




No Comments