El resultado que obtengo ahora me deja en blanco cuando ese carácter no está allí:
Código
const categories = catSubSheet.getRange(2, 1, catSubSheet.getLastRow() - 1, 3).getValues(); let categories1 = categories.filter(e => e[0] != '').map(function (e) { return e[0] }); let sheetsToProcess = []; for (let a = 0; a < categories1.length; a++) { sheetNames = categories1[a].substring(0, categories1[a].indexOf(" (")); sheetsToProcess.push('BOQ ' + sheetNames) }Datos
[ [GF HTG SHEET 1 (Drawing)], [GF HTG SHEET 2 (Drawing)], [GF DWS SHEET 1], ]El resultado
Sheets to Process: BOQ GF HTG SHEET 1,BOQ GF HTG SHEET 2,BOQResultado Esperado
Sheets to Process: BOQ GF HTG SHEET 1,BOQ GF HTG SHEET 2,BOQ GF DWS SHEET 1Como una solución rápida, puedes probar esto:
... let sheetsToProcess = []; for (let a = 0; a < categories1.length; a++) { var index = categories1[a].indexOf(" ("); if (index > -1) { sheetNames = categories1[a].substring(0,index) } else { sheetNames = categories1[a] } sheetsToProcess.push('BOQ ' + sheetNames) } ...Pero en realidad se puede hacer de una manera más ordenada.
Algo como esto:
var categories1 = [ 'GF HTG SHEET 1 (Drawing)', 'GF HTG SHEET 2 (Drawing)', 'GF DWS SHEET 1' ]; var sheetsToProcess = categories1.map(x => 'BOQ ' + x.replace(/ \(.+$/, '')); console.log(sheetsToProcess); // [ 'BOQ GF HTG SHEET 1', 'BOQ GF HTG SHEET 2', 'BOQ GF DWS SHEET 1' ]