【问题标题】:Data Extraction From the Column Dynamically动态从列中提取数据
【发布时间】:2021-05-24 22:54:28
【问题描述】:

我在 Google 表格中有这些数据。

Young, Yamen (09/21/1960 M)
Address: 012 Hendrix Street Brooklyn NY 12207
Phone: 917-621-0000(Home) 917-000-8989(Mobile)
Insurance: CHIP(U4024563201) Location: (Far Rockaway) Type: Radiology - Results Follow-up
Memo:
Status: Confirmed

行数。我想从这个数据中提取多个信息为这样的可读格式:

这是我迄今为止开发的公式,但这些公式无法按我的意愿工作。

C3 =LEFT(A2,(FIND("(",A2,1)-1))
D3 =MID(A2,FIND("(",A2,1)+1,10)
E3 =MID(A5,FIND(":",A5)+1,256)
F3 =MID(A5,FIND("(",A5,1)+1,11)

这是附表,我正在尝试创建一个可以动态提取它的公式。对问题的任何帮助将不胜感激。

https://docs.google.com/spreadsheets/d/1PUUWBwV4iLvyKEIjKwPiD7oiHl77Y6rJQ98d6Wxlg-s/edit?usp=sharing

【问题讨论】:

    标签: google-sheets google-sheets-formula


    【解决方案1】:

    我建议使用自定义函数,您可以使用正则表达式在字符串中提取字符串并处理复杂的模式。

    编写自定义函数:

    1. 在 Google 表格中创建或打开电子表格。
    2. 选择菜单项工具 > 脚本编辑器。
    3. 删除脚本编辑器中的所有代码并粘贴下面提供的代码
    4. 点击顶部的保存保存。

    要使用自定义功能:

    1. 单击要使用该功能的单元格。
    2. 键入等号 (=),后跟函数名称和任何输入值(例如 =DOUBLE(A1)),然后按 Enter。
    3. 单元格将暂时显示正在加载...,然后返回结果。

    代码:

    function extractData() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getSheetByName("Sheet1");
      var range = sheet.getRange(2, 2, sheet.getLastRow()-1, 1);
      var array = range.getValues(); //get data in spreadsheet A2:A49
    
      var filteredArr = array.filter(function(obj){ // this function will remove empty subarray
       return obj[0] != "";
      });
      var newArr = filteredArr.flat(); //convert 2d array into 1d
      const groupedArr = [];
      while(newArr.length) groupedArr.push(newArr.splice(0,6)); //group array by 6 elements, this will convert the array into 2d
      var finalArr = [];
    
      for( var i = 0; i < groupedArr.length; i++ ){
        var tempArr = [];
        for( var j = 0; j < groupedArr[0].length; j++ ){
          var nameRegex = /^(.+)(?=\s?\(.+\))/;
          var dobRegex = /\d{2}\/\d{2}\/\d{4}/;
          var insuranceRegex = /^Insurance:\s([A-Za-z0-9\s]+)\(.+/;
          var idRegex = /^Insurance:\s[A-Za-z0-9\s]+\((\w+)\)/;
          if( j == 0 ){
            var name = groupedArr[i][j].match(nameRegex)[1];
            var dob = groupedArr[i][j].match(dobRegex)[0];
            tempArr.push(name);
            tempArr.push(dob);
          }else if( j == 3){
            var insurance = (groupedArr[i][j].match(insuranceRegex) != null) ? groupedArr[i][j].match(insuranceRegex)[1]:"";
            var id = (groupedArr[i][j].match(idRegex) != null) ? groupedArr[i][j].match(idRegex)[1]:"";
            tempArr.push(insurance);
            tempArr.push(id);
          }
        }
        finalArr.push(tempArr);
      }
    
      return finalArr;
    }
    

    输出:

    参考资料:

    【讨论】:

    • 谢谢你,我很抱歉迟到了。因为周末没能回复。但我在第 23 行收到错误 TypeError: groupedArr[i][j].match is not a function var name = groupedArr[i][j].match(nameRegex)[1];
    • @Valiant - 我注意到您编辑了电子表格并在 A 列中添加了编号。如果是这种情况,您必须将范围的值从 var range = sheet.getRange(2, 1, sheet.getLastRow()-1, 1); 更改为 var range = sheet.getRange(2, 2, sheet.getLastRow()-1, 1);。这是脚本将获取其数据的地方。我根据您拥有的当前电子表格更新了上面的答案。
    猜你喜欢
    • 1970-01-01
    • 2016-02-01
    • 2021-09-26
    • 2020-04-09
    • 1970-01-01
    • 2013-05-29
    • 2014-12-11
    • 2018-11-15
    • 1970-01-01
    相关资源
    最近更新 更多