Заменить все запятые пустыми в массиве - PullRequest
0 голосов
/ 27 мая 2020

Я зашел в тупик - нужна помощь! код ниже. Должно быть очень просто .... У меня есть массив, состоящий из многих строк и ширины 33 столбца ... Мне просто нужно вывести все запятые из значений массива. Массив состоит из некоторых строковых полей, а также некоторых числовых полей ... Любая помощь приветствуется!

Пока мне не повезло с функцией .replace .... спасибо

function Pipeline() {
  var writelocation = SpreadsheetApp.openById(globalvariables().importerid);
  var writesheet = writelocation.getSheetByName("Pipeline");
  var linkssheet = writelocation.getSheetByName(globalvariables().linkstab);
  writesheet.getRange("A:AG").clear();
  //var length = 1 + getLastRowSpecial(linkssheet.getRange("C:C").getValues());
  var length = 5;
  var array = [];
  var array = [
    ["Highlight", "Customer", "Prospect", "Type", "Status", "Product Detail & Comments", "Start Date", "End Date", "Bulk Sales", "Bulk GM%", "Non-Bulk Sales", "Non-Bulk GM%", "Safety Sales", "Safety GM%", "Welding Sales", "Welding GM%", "Rent / Other Sales", "Rent / Other GM%", "Source", "Segment", "Competitor", "Contract Expiration", "Win Reason", "Loss Reason", "PSA Won", "Contacts", "Probability", "Monthly Sales", "Monthly GM", "12M Sales", "District", "Area", "Salesperson"]
    ];    
  for (i=2; i<length; i++) {
    var source = SpreadsheetApp.openByUrl(linkssheet.getRange(i,3).getValue()).getSheetByName("Pipeline").getRange("A4:AG").getValues().filter(function(item){ return item[4] != ""; });

    for (k=0; k<source.length; k++) {
      for (j=0; j<source[k].length; j++) {
        source[k][j].toString().replace(/[,]/g,'-');  

      } 
      array.push(source[k]);
         }
  }
  writesheet.getRange(1,1,array.length,array[0].length).setValues(array);  
  linkssheet.getRange("E3").setValue(new Date()).setNumberFormat("yyyy-MM-dd HH:mm:ss");
}

Ответы [ 3 ]

2 голосов
/ 27 мая 2020

В вашем скрипте есть несколько проблем -

  1. Вы дважды объявляете одну и ту же переменную -

var array = []; var array = ["Highlight",...]

Вы устанавливаете значения заголовков в одномерном массиве, который нельзя записать в Sheet.

var array = [ ["Highlight", "Customer", "Prospect", "Type", "Status", "Product Detail & Comments", "Start Date", "End Date", "Bulk Sales", "Bulk GM%", "Non-Bulk Sales", "Non-Bulk GM%", "Safety Sales", "Safety GM%", "Welding Sales", "Welding GM%", "Rent / Other Sales", "Rent / Other GM%", "Source", "Segment", "Competitor", "Contract Expiration", "Win Reason", "Loss Reason", "PSA Won", "Contacts", "Probability", "Monthly Sales", "Monthly GM", "12M Sales", "District", "Area", "Salesperson"] ];

Вы заменяете "," на "-", когда заголовок говорит, что вы хотите заменить его пробелом

Вы не присваиваете замененное значение какой-либо другой переменной , метод replace не изменяет объект, для которого он вызывается.

Вот как должен выглядеть ваш код

function Pipeline() {
  var writelocation = SpreadsheetApp.openById(globalvariables().importerid);
  var writesheet = writelocation.getSheetByName("Pipeline");
  var linkssheet = writelocation.getSheetByName(globalvariables().linkstab);
  writesheet.getRange("A:AG").clear();
  //var length = 1 + getLastRowSpecial(linkssheet.getRange("C:C").getValues());
  var length = 5;
  var array = [];
  array[0] = [
    ["Highlight", "Customer", "Prospect", "Type", "Status", "Product Detail & Comments", "Start Date", "End Date", "Bulk Sales", "Bulk GM%", "Non-Bulk Sales", "Non-Bulk GM%", "Safety Sales", "Safety GM%", "Welding Sales", "Welding GM%", "Rent / Other Sales", "Rent / Other GM%", "Source", "Segment", "Competitor", "Contract Expiration", "Win Reason", "Loss Reason", "PSA Won", "Contacts", "Probability", "Monthly Sales", "Monthly GM", "12M Sales", "District", "Area", "Salesperson"]
  ];    
  for (i=2; i<length; i++) {
    var source = SpreadsheetApp.openByUrl(linkssheet.getRange(i,3).getValue()).getSheetByName("Pipeline").getRange("A4:AG").getValues().filter(function(item){ return item[4] != ""; });

    for (k=0; k<source.length; k++) {
      for (j=0; j<source[k].length; j++) {
        source[k][j] = source[k][j].toString().replace(/[,]/g,' ');  

      } 
      array.push(source[k]);
    }
  }
  writesheet.getRange(1,1,array.length,array[0].length).setValues(array);  
  linkssheet.getRange("E3").setValue(new Date()).setNumberFormat("yyyy-MM-dd HH:mm:ss");
}

0 голосов
/ 27 мая 2020
function Pipeline() {
  var writelocation = SpreadsheetApp.openById(globalvariables().importerid);
  var writesheet = writelocation.getSheetByName("Pipeline");
  var linkssheet = writelocation.getSheetByName(globalvariables().linkstab);
  writesheet.getRange(1,1,writesheet.getLastRow(),33).clear();
  var array = [["Highlight", "Customer", "Prospect", "Type", "Status", "Product Detail & Comments", "Start Date", "End Date", "Bulk Sales", "Bulk GM%", "Non-Bulk Sales", "Non-Bulk GM%", "Safety Sales", "Safety GM%", "Welding Sales", "Welding GM%", "Rent / Other Sales", "Rent / Other GM%", "Source", "Segment", "Competitor", "Contract Expiration", "Win Reason", "Loss Reason", "PSA Won", "Contacts", "Probability", "Monthly Sales", "Monthly GM", "12M Sales", "District", "Area", "Salesperson"]];    
  var vs=linksheet.getRange(2,3,3,1).getValues();
  vs.forEach(function(url,i){
    var sss=SpreadsheetApp.openByUrl(url);
    var ssh=sss.getSheetByName("Pipeline");
    var srg=ssh.getRange(4,1,ssh.getLastRow()-3,1);
    var source=srg.getValues();
    source.forEach(function(r,k){
      r.forEach(function(c,j){
        source[k][j].replace(/[,]/g,'');
      });
      array.push(source[k])
    });   
    writesheet.getRange(1,1,array.length,array[0].length).setValues(array);  
    linkssheet.getRange("E3").setValue(new Date()).setNumberFormat("yyyy-MM-dd HH:mm:ss");
  });
}
0 голосов
/ 27 мая 2020

Как насчет этого ответа?

Пункты модификации:

  • Я думаю, что в вашем скрипте source[k][j].toString().replace(/[,]/g,'-'); необходимо поместить в source[k][j].
    • Я думаю, что причина вашей проблемы может быть в следующем.
  • Ваш титул Replace All Commas with Blank in an Array. Но replace(/[,]/g,'-') заменяет , на -. Хотя я не уверен насчет фактического значения source[k][j].toString(), если вы хотите заменить , пустым, измените его на replace(/[,]/g,' ') или replace(/[,]/g,'').
    • Я думаю, что вы хотите заменить только ,, вы также можете использовать replace(/,/g,' ')

Когда указанные выше пункты отражаются в вашем скрипте, он принимает следующий вид.

Измененный скрипт:

От:
source[k][j].toString().replace(/[,]/g,'-');
Кому:
source[k][j] = source[k][j].toString().replace(/[,]/g,' ');  // or replace(/[,]/g,'')

Ссылка:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...