【问题标题】:Substring comparison across columns within Google Apps ScriptGoogle Apps 脚本中跨列的子字符串比较
【发布时间】:2020-05-07 18:08:52
【问题描述】:

我有一个大型数据集粘贴到 Google 表格中。我想比较这张表中的两列。 第一列是长字符串,我只关心这一列每个单元格的第一个字符。

第二列是基于文本的。我想将数据粘贴到新工作表中如果 A 列中的字符串以数字(不是字母)开头并且 B 列中的文本是“早期”。 p>

我的挑战是使用 Javascript 仅获取 A 列的 1 个字符的子字符串。错误是“TypeError:str.substring 不是函数”。我也试过 slice() 也没有效果。 Apps 脚本不支持此功能吗?

如何隔离这些第一个字符,然后与另一列进行比较?

然后,我还需要将 两个 列中符合此条件的行推送到新选项卡。

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('data');
  var str = sheet.getRange('A:A').getValues(); 
  var char = str.substring(0,2);
  var stage = sheet.getRange('B:B');
  var endColumn = sheet.getLastColumn();
  var value_stage = (stage.getValues());
  var value_char = (char.getValues());

  var csh = ss.getSheetByName('new_sheet'); //destination sheet
  var data = [];
  var j =[];
    for (i=0; i<value_char.length;i++) {
      if 
      (
        (
          ( value_char[i] == '0') ||
          ( value_char[i] == '1') ||
          ( value_char[i] == '2') ||
          ( value_char[i] == '3') || etc... )

       &&
          ( value_stage[i] == 'Early')
)

  data.push.apply(data,sheet.getRange(i+1,1,1,endColumn).getValues());
  j.push(i);
 }
 }
 csh.getRange(csh.getLastRow()+1,1,data.length,data[0].length).setValues(data);

以下示例数据:

**ID**                                **Stage**  **Name**
A               texthere                Early   Bob
B               abcdefgh                Late    Sally
52              texthere                Early   Jim
C               thesdfas                Late    Allan
00              tsdfsdfd                Late    Susan
11              qqwerrww                Early   Ryan
Q               tsdfsagd                Early   Sarah
98              fdsafads                Early   Evan
09              fdasfdsa                Early   Paul
10              abcdefgh                New     Megan
10              abcdefgh                Early   Cooper





NOTE:  in the real dataset, columns A and B are actually K & L  

ID 列在字符串的开头部分和结尾之间有那些空格。这就是我想要切掉的东西

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    试试这个:

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sh=ss.getSheetByName('data');
    var svs=sh.getRange(1,2,sheet.getLastRow(),2).getValues();
    var csh=ss.getSheetByName('new_sheet');
    var data=[];
    var j=[];
    svs.forEach(function(r,i){
      if((r[0].slice(0,1)=='1' || r[0].slice(0,1)=='2') && r[1]=='Early') {
      //do what you want in here
      }
    });
    

    【讨论】:

    • 嘿库珀,谢谢您的回复。但是,我还是有点困惑。我看不到您的代码能够在 A 列的每个单元格中拆分字符串的位置?目标是基本上用该单元格中的第一个字符覆盖A列中每个单元格中的值。我尝试过使用 splice()、split()、substr()、substring() 等...
    • 如果这不起作用,请将一些数据共享为 csv。您可以将其发布到代码区域,然后我们可以将其复制并粘贴到电子表格中。
    • 这实际上就是您所描述的。如果您需要两个(第一个和第二个)字符,只需将r[0].slice(0,1) 更改为r[0].slice(0,2),然后使用正则表达式检查它们都是数字,例如r[0].slice(0,2).match(/^\d*$/).test()。但考虑到@Cooper 实际上解决了您提出的 挑战,因为您只说了第一个字符。
    • 我去看看。可以分享几行示例数据吗?
    • 抱歉,我拒绝关注电子表格的链接。请向您的问题发布少量示例数据,就像您编写代码一样。最好是 csv,这样可以直接复制粘贴到电子表格中。
    猜你喜欢
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多