Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Optimization 组织数据的编码_Optimization_Google Apps Script_Google Sheets - Fatal编程技术网

Optimization 组织数据的编码

Optimization 组织数据的编码,optimization,google-apps-script,google-sheets,Optimization,Google Apps Script,Google Sheets,因此,我在电子表格中有大约2000个条目,其中包含一些公司的数据。数据组织如下: 公司名称:…电子邮件:…电话号码:…网站:…地址:…公司名称:…电子邮件:…电话号码:

因此,我在电子表格中有大约2000个条目,其中包含一些公司的数据。数据组织如下:

公司名称:…
电子邮件:…
电话号码:…
网站:…
地址:…

公司名称:…
电子邮件:…
电话号码:<等等

我想要的是写一个函数,在列下面的另一个电子表格中组织它

公司名称电子邮件电话号码Web

我写了这个函数的介绍

function OrganizeData()
{var sheetFrom = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Orginial");
 var sheetTo = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Organized");

但我不知道如何编写代码,将某个关键字(电子邮件)后的文本从电子表格的一行复制到电子表格2中的另一列

这有点像猜测,但会将垂直定位的数据转换为列

function testGetData()
{
  getData('SpreadSheetID','Sheet1','Sheet2'); 
}

function getData(spreadsheetId,inputSheetName,outputSheetName)
{
  var ss=SpreadsheetApp.openById(spreadsheetId);
  var inpsh=ss.getSheetByName(inputSheetName);
  var outsh=ss.getSheetByName(outputSheetName);
  var inrg=inpsh.getDataRange();
  var invA=inrg.getValues();
  var outA=[];
  var n=0;
  outA.push(['Name','Email','Phone','Web','Address','Error']);
  var row=[];
  for(var i=0;i<invA.length;i++)
  {
    var vA=[];
    vA=String(invA[i][0]).split(':');//assuming data is in one string
    if(vA.length<2)//assuming data is split into first two columns with no : in the string
    {
      vA.push(invA[i][1]);
    }
    switch(vA[0])
    {
      case 'Company name':
        row['Name']=String(vA[1]).trim();//trim off whitespace both ends
        break;
      case 'Email':
        row['Email']=String(vA[1]).trim();
        break
      case 'Phone no':
        row['Phone']=String(vA[1]).trim();
        break;
      case 'Web':
        row['Web']=String(vA[1]).trim();
        break;
      case 'address':
        row['Address']=String(vA[1]).trim();
        outA.push([(typeof(row.Name)!='undefined')?row.Name:'',(typeof(row.Email)!='undefined')?row.Email:'',(typeof(row.Phone)!='undefined')?row.Phone:'',(typeof(row.Web)!='undefined')?row.Web:'',(typeof(row.Address)!='undefined')?row.Address:'',(typeof(row.Error)!='undefined')?row.Error:'']);
        break;
      default:
        row['Error']=Utilities.formatString('Row Error: Index: %s vA[0]= %s vA[1]= %s',i,(typeof(vA[0])!='undefined')?vA[0]:'Not Defined',(typeof(vA[1])!='undefined')?vA[1]:'Not Defined');
        break;
    }
  }
  var otrg=outsh.getRange(1,1,outA.length,outA[0].length);//determine size of output array Its good to have headers for this
  otrg.setValues(outA);
}
函数testGetData()
{
getData('SpreadSheetID','Sheet1','Sheet2');
}
函数getData(电子表格ID、inputSheetName、outputSheetName)
{
var ss=电子表格应用程序openById(电子表格ID);
var inpsh=ss.getSheetByName(inputSheetName);
var outsh=ss.getSheetByName(outputSheetName);
var inrg=inpsh.getDataRange();
var invA=卢比getValues();
var outA=[];
var n=0;
推送(['Name'、'Email'、'Phone'、'Web'、'Address'、'Error']);
var行=[];

对于(var i=0;iYou需要按
进行拆分,并使用正则表达式和转置。在当前状态下,您的问题太广泛,不太可能得到答案。而且您提供的数据格式太模糊,无法给出任何解决方案。请为您的数据提供一个屏幕截图和一个虚拟表,其中精确位置为
,sp字符之间的ACE、字数、所有数据的位置是否在同一单元格(一列)中或者分散在不同的列中,无论字符串是否有结尾,所有数据是否都包含电话号码?地址和下一个公司名称之间是否总是有一个空行?等等..你能给我们一个原始表中数据的代表性样本,以便我们进行测试吗。
function getData(spreadsheetId,inputSheetName,outputSheetName)
{
  var ss=SpreadsheetApp.openById(spreadsheetId);
  var inpsh=ss.getSheetByName(inputSheetName);
  var outsh=ss.getSheetByName(outputSheetName);
  var inrg=inpsh.getDataRange();
  var invA=inrg.getValues();
  var outA=[];
  var n=0;
  outA.push(['Name','Email','Phone','Web','Address','Error']);
  var row=[];
  for(var i=0;i<invA.length;i++)
  {
    var vA=[];
    vA=String(invA[i][0]).split(':');//assuming data is in one string
    if(vA.length<2)//assuming data is split into first two columns with no : in the string
    {
      vA.push(invA[i][1]);
    }
    switch(vA[0])
    {
      case 'Company name':
        row['Name']=String(vA[1]).trim();//trim off whitespace both ends
        break;
      case 'Email':
        row['Email']=String(vA[1]).trim();
        break
      case 'Phone no':
        row['Phone']=String(vA[1]).trim();
        break;
      case 'Web':
        row['Web']=String(vA[1]).trim();
        break;
      case 'address':
        row['Address']=String(vA[1]).trim();
        outA.push([(typeof(row.Name)!='undefined')?row.Name:'',(typeof(row.Email)!='undefined')?row.Email:'',(typeof(row.Phone)!='undefined')?row.Phone:'',(typeof(row.Web)!='undefined')?row.Web:'',(typeof(row.Address)!='undefined')?row.Address:'',(typeof(row.Error)!='undefined')?row.Error:'']);
        row['Name']='';//cleared out the row array
        row['Email']='';
        row['Phone']='';
        row['Address']='';
        row['Error']='';
        break;
      default:
        row['Error']=Utilities.formatString('Row Error: Index: %s vA[0]= %s vA[1]= %s',i,(typeof(vA[0])!='undefined')?vA[0]:'Not Defined',(typeof(vA[1])!='undefined')?vA[1]:'Not Defined');
        outA.push(['','','','','',row.Error]);//output errors on separate lines
        row['Error']='';//cleared errors
        break;
    }
  }
  var otrg=outsh.getRange(1,1,outA.length,outA[0].length);//determine size of output array Its good to have headers for this
  otrg.setValues(outA);
}