簡體   English   中英

Pipedrive API GET 請求 Google Sheet 中數組的 setValues 不起作用

[英]Pipedrive API GET request setValues of array in Google Sheet not working

我有一個使用 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]]但沒有填充到工作表中; 它保持空白。

問題:

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()]

完整片段:

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);
}

結果:

在此處輸入圖片說明


相關文章:

范圍方法 getValues() 返回和 setValues() 接受什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM