⚡ Usamos Google Apps Script como puente — sin API Key, sin bloqueos CORS.
1
Abrí el editor de tu planilla
En Google Sheets → Extensiones → Apps Script
2
Pegá este código exacto y guardá
Borrá todo lo existente y pegá esto:
function doGet(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var action = e.parameter.action || 'list';
var callback = e.parameter.callback || '';
var result;
if (action === 'list') {
var names = ss.getSheets()
.map(function(s){ return s.getName(); })
.filter(function(n){ return n.toLowerCase().indexOf('paquete') >= 0; });
result = JSON.stringify({ sheets: names });
} else if (action === 'data') {
var sheet = ss.getSheetByName(e.parameter.sheet);
if (!sheet) {
result = JSON.stringify({ error: 'Hoja no encontrada' });
} else {
var rows = sheet.getDataRange().getValues();
result = JSON.stringify({ rows: rows });
}
} else if (action === 'write') {
var sheet = ss.getSheetByName(e.parameter.sheet);
if (!sheet) {
result = JSON.stringify({ error: 'Hoja no encontrada' });
} else {
var code = e.parameter.code;
var qty = parseInt(e.parameter.qty) || 0;
var ccIdx = (e.parameter.cc || 'C').toUpperCase().charCodeAt(0) - 64;
var writeCol = (e.parameter.cw || 'E').toUpperCase().charCodeAt(0) - 64;
var data = sheet.getDataRange().getValues();
var found = false;
for (var i = 1; i < data.length; i++) {
if (String(data[i][ccIdx-1]).trim() === code) {
sheet.getRange(i+1, writeCol).setValue(qty);
found = true;
break;
}
}
result = JSON.stringify({ ok: found });
}
} else {
result = JSON.stringify({ error: 'Accion desconocida' });
}
if (callback) {
return ContentService
.createTextOutput(callback + '(' + result + ')')
.setMimeType(ContentService.MimeType.JAVASCRIPT);
}
return ContentService
.createTextOutput(result)
.setMimeType(ContentService.MimeType.JSON);
}
3
Publicá como Web App
Implementar → Nueva implementación → Web App
· Ejecutar como: Yo
· Acceso: Cualquier persona
→ Implementar → autorizá → copiá la URL /exec
4
Pegá la URL aquí abajo
URL del Web App (termina en /exec)
Col. Código
Col. Esperado
Col. Recibido ✍️
Nombre de quien revisa
Se guardará en la celda I2 de cada paquete junto con los horarios.
Envío de reporte por email (opcional)
Usamos EmailJS — gratis hasta 200 emails/mes.
Creá una cuenta en emailjs.com, un Email Service y un Template con las variables: pkg_name, report_body, sent_at.
Pegá los IDs abajo y listo.
EmailJS Public Key
Service ID
Template ID
Email destino
— o bien —
←
—
—
👤 —
▶ —
⏱ 00:00
⏹ —
0
Correctos
0
Diferencia
0
Sin recibir
Progreso0%
🔫
Listo para escanear
Tocá para activar el escáner Bluetooth
⌨️
Productos
←
Reporte de recepción
—
Guardando...
Ajustar cantidad
0
⚠ No esperado
Este código no está en el paquete. ¿Querés registrarlo como producto extra?
1
¿Quién revisa?
Tu nombre, la hora de inicio y la hora de finalización
se guardarán automáticamente en el Drive.