【问题标题】:Pipedrive API GET request setValues of array in Google Sheet not workingPipedrive API GET请求Google表格中数组的setValues不起作用
【发布时间】:2020-10-25 20:38:00
【问题描述】:

我有这个数组,我使用 API 从 Pipedrive 中提取:[John Smith, [555-867-5309, 444-867-5309], [john@gmail.com, john@yahoo.com]] 我希望这个数组像这样填充到 Google 工作表中:

         |       A        |               B                |                    C               |
=========+========+========+========+========+========+========+========+========+===============
    1    |   John Smith   |   555-867-5309, 444-867-5309   |   john@gmail.com, john@yahoo.com   |

我正在使用 setValues,但收到一个错误,即 number[] 与 range.setValues 的方法签名不匹配,因此它没有将任何内容粘贴到工作表中。

这是我的代码。它可以提取数据。我只想提取它返回的所有数据的三个字段(姓名、电话和电子邮件)。

var URL = "https://....pipedrive.com";
var API_TOKEN = "...";
function test() {
  var sheeturl = 'https://docs.google.com/spreadsheets/d/...';
  var ss = SpreadsheetApp.openByUrl(sheeturl);
  var leadsSheet = ss.getSheetByName('Leads Sheet');
  var personData = [];
  
  var personurl = URL +'/v1/persons/3812?api_token='+ API_TOKEN;
  var options = {
    "method": "get",
    "contentType": "application/json",
  };
  var response = UrlFetchApp.fetch(personurl, options);
  response = JSON.parse(response.getContentText());
  var name = response.data.name;
  var phone = [response.data.phone.map(phone => phone.value).join(', ')];
  var email = [response.data.email.map(email => email.value).join(', ')];
  var personArray = [name, phone, email];
  Logger.log(personArray);
  personData.push(personArray);
  leadsSheet.getRange(leadsSheet.getLastRow()+1, 5, personData.length, personData[0].length).setValues(personData); //writes to end of sheet
}

来自此的日志是:[20-10-25 16:29:34:339 EDT] [John Smith, [555-867-5309, 444-867-5309], [john@gmail.com, john@yahoo.com]],但工作表中没有任何内容;它仍然是空白的。

【问题讨论】:

    标签: javascript json google-apps-script google-sheets pipedrive-api


    【解决方案1】:

    问题:

    personArray 返回:

    [John Smith, [555-867-5309, 444-867-5309], [john@gmail.com, john@yahoo.com]]

    但你的目标是返回:

    [[John Smith, 555-867-5309,444-867-5309, john@gmail.com,john@yahoo.com]]

    其中555-867-5309,444-867-5309john@gmail.com,john@yahoo.com单个 string 元素,以逗号分隔。

    要将['555-867-5309', '444-867-5309'] 转换为'555-867-5309,444-867-5309',您可以使用Array.prototype.toString()


    解决方案:

    替换:

    var personArray = [name, phone, email];

    与:

    var personArray = [name,phone.toString(),email.toString()]

    完成sn-p:

    var URL = "https://....pipedrive.com";
    var API_TOKEN = "...";
    function test() {
      var sheeturl = 'https://docs.google.com/spreadsheets/d/...';
      var ss = SpreadsheetApp.openByUrl(sheeturl);
      var leadsSheet = ss.getSheetByName('Leads Sheet');
      var personData = [];
      
      var personurl = URL +'/v1/persons/3812?api_token='+ API_TOKEN;
      var options = {
        "method": "get",
        "contentType": "application/json",
      };
      var response = UrlFetchApp.fetch(personurl, options);
      response = JSON.parse(response.getContentText());
      var name = response.data.name;
      var phone = [response.data.phone.map(phone => phone.value).join(', ')];
      var email = [response.data.email.map(email => email.value).join(', ')];
      var personArray = [name,phone.toString(),email.toString()];
      Logger.log(leadsSheet.getLastRow()) // <- this should give the last row with content. Scroll down to your sheet to confirm.
      personData.push(personArray);
      leadsSheet.getRange(leadsSheet.getLastRow()+1, 5, personData.length, personData[0].length).setValues(personData); //writes to end of sheet
    }
    

    最小的可重现示例:

    function myFunction(){
    
    const sheet = SpreadsheetApp.getActive().getSheetByName('Leads Sheet');
    var personData=[];
    var name = 'John Smith' 
    var phone = ['555-867-5309', '444-867-5309'];
    var email = ['john@gmail.com', 'john@yahoo.com'];
    var personArray = [name,phone.toString(),email.toString()];
    personData.push(personArray);
    sheet.getRange(1,1,personData.length,personData[0].length).setValues(personData);
    }
    

    结果:


    相关文章:

    What does the range method getValues() return and setValues() accept?

    【讨论】:

    • 谢谢,我试过了,它可以在新的独立电子表格中使用。但是,当我尝试在现有的脚本/工作表设置中使用完全相同的功能时,它什么也没做。我什至没有修改函数——我只是将它粘贴进去,然后为该函数点击“运行”,而工作表上没有填充任何内容。你知道问题可能是什么吗?
    • 如果它没有丢弃任何错误,那么确保Logger.log(leadsSheet.getLastRow()) 给出最后一行的数字。向下滚动到Leads Sheet 以查看数据是否粘贴在工作表底部的某处。新数据应粘贴到Leads Sheet,因此请确保此工作表存在并且leadsSheet.getLastRow() 返回预期的数字,即包含内容的最后一行。 @823g4n8901
    • @823g4n8901 我在答案的解决方案部分更新了 Complete sn-p。您唯一需要确保的是您有一张完全名称为Leads SheetLogger.log(leadsSheet.getLastRow()) 的工作表,以确保您获得的是最后一行的内容。
    • 再次感谢您的帮助。问题是我的工作表没有正确引用 - 我使用的是通过 url 获取工作表的方式,由于某种原因它不能在函数内工作,但是当我在函数之外通过 url 引用工作表时它工作。所以你的答案很完美。
    猜你喜欢
    • 2017-09-15
    • 2023-03-29
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    相关资源
    最近更新 更多