1

Я пытаюсь импортировать все сделки Pipedrive и записывать необходимую информацию в листы Google.Импорт данных из API-интерфейсов pipedrive в листы Google. Как скопировать данные в лист в правильных столбцах и строках

Что я уже могу сделать: доступ к фиду и анализ данных в переменной. И напечатайте эту переменную в 1 ячейку. Конечно, это пока невозможно.

Кода несколько продувки (здание в то время как я учусь)

// Standard functions to call the spreadsheet sheet and activesheet 
function alldeals() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheets = ss.getSheets(); 
    var sheet = ss.getActiveSheet(); 

    //the way the url is build next step is to itterate between the end because api only allows a fixed number of calls (100) this way i can slowly fill the sheet. 
    var url = "https://api.pipedrive.com/v1/deals?start="; 
    var url2 = "&limit=" 
    var start = 0; 
    var end = start+50; 
    var token = "&api_token=hiddenforobviousreasons" 


    //call the api and fill dataAll with the jsonparse. 
//then the information is set into the 
//dataSet so that i can refill datall with new data. 

    var response = UrlFetchApp.fetch(url+start+url2+end+token); 
    var dataAll = JSON.parse(response.getContentText()); 
    var dataSet = dataAll; 


    //create array where the data should be put 
    var rows = [], data; 

    for (i = 0; i < dataSet.length; i++) { 
    data = dataSet[i]; 
    rows.push([data.id, data.value,data.pipeline_id]); //your JSON entities here 
    } 

    dataRange = sheet.getRange(1, 1, rows.length, 3); // 3 Denotes total number of entites 
    dataRange.setValues(rows); 

} 

Ошибки я получаю на sheet.getRange.

То, что я хочу добиться, это поместить данные в столбцы Ид, значение, pipeline_id

Любые указатели на то, что направление мне нужно идти, чтобы решить эту проблему, было бы удивительным! Исправить было бы хорошо, но некоторые указатели были бы более полезными для моего понимания.

Ошибка я получаю следующее:

De coördinaten из afmetingen ван гет bereik Zijn ongeldig. (Регель 29, bestand 'dealpull5.0')

вольного перевода:

Координаты размера плеса является недействительным (line29, файл "dealpull5.0")

+0

Не могли бы вы отредактировать свои комментарии к коду на английском языке, пожалуйста? Какую ошибку вы получаете от 'sheet.getRange()'? – Mogsdad

+1

Я перевел комментарии на английский и добавил ошибку в конце. Спасибо, что проверил мое сообщение! –

ответ

0

Вы извлекаться данные из веб-API и преобразовали его в двумерный массив (массив строк, где каждая строка представляет собой массив ячеек). Для подтверждения этого, вы можете добавить Logger вызов после цикла, что конюхи данные:

var rows = [], data; 

    for (i = 0; i < dataSet.length; i++) { 
    data = dataSet[i]; 
    rows.push([data.id, data.value,data.pipeline_id]); //your JSON entities here 
    } 

    Logger.log(JSON.stringify(rows,null,2)); // Log transformed data 

Если вы бежите, что вы должны увидеть что-то подобное в журналах:

[--timestamp--] [ 
    [ id1, value1, pipeline_id1 ], 
    [ id2, value2, pipeline_id2 ], 
    ... 
] 

Следующая вы хотите, чтобы записать его в таблицу, которая выглядит следующим образом:

 A  B   C 
1 | ID | Value | Pipeline_Id | 
    +------+-------+-------------+ 
2 |  |  |    | 
3 |  |  |    | 

сообщение об ошибке жалуются, что размер диапазона и размера вас r данные не совпадают.

Вещи отметить:

  • Поскольку есть столбец заголовков, первая ячейка, которая будет содержать данные из вызова API будет A2, который также выражен как R2C1.
  • При использовании Range.setValues() все строки предоставленных данных должны быть такой же длины, как и ширина диапазона. При необходимости вам может потребоваться нанести или обрезать данные перед вызовом Range.setValues().
  • Удобно сопоставлять размер диапазона с размером данных; Таким образом, вы можете легко адаптироваться к изменениям в данных, полученных из API.

    var dataRange = sheet.getRange(2, 1, rows.length, rows[0].length); 
    dataRange.setValues(rows); 
    
+0

Эй, Могсдад, Спасибо за помощь! выяснили, что массив в строках не заполняется, но теперь я знаю, откуда происходит ошибка! –

+0

Получил это рабочий :) получил неправильный массив. теперь, чтобы построить второй цикл! спасибо за вашу помощь mogsdad –

1

Спасибо за этот пост! Я переработал ваш код для некоторых из моих потребностей, чтобы вернуть массив соответствующих сделок напрямую.

Я также изменил запрос api, чтобы вытащить только определенные поля сделки, отменить 500 сделок и использовать фильтр PipeDriver, который мы установили.

// Standard functions to call the spreadsheet sheet and activesheet 
function GetPipedriveDeals() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheets = ss.getSheets(); 
    var sheet = ss.getActiveSheet(); 

    //the way the url is build next step is to iterate between the end because api only allows a fixed number of calls (100) this way i can slowly fill the sheet. 
    var url = "https://api.pipedrive.com/v1/deals:(org_name,title,owner_name,status,pipeline_id)?start="; 
    var limit = "&limit=500"; 
    var filter = "&filter_id=1"; 
    var pipeline = 7; // put a pipeline id specific to your PipeDrive setup 
    var start = 0; 
// var end = start+50; 
    var token = "&api_token=your-api-token-goes-here" 


    //call the api and fill dataAll with the jsonparse. 
    //then the information is set into the 
    //dataSet so that i can refill datall with new data. 

    var response = UrlFetchApp.fetch(url+start+limit+filter+token); 
    var dataAll = JSON.parse(response.getContentText()); 
    var dataSet = dataAll; 

    //create array where the data should be put 
    var rows = [], data; 

    for (var i = 0; i < dataSet.data.length; i++) { 
    data = dataSet.data[i]; 

    if(data.pipeline_id === pipeline){ 
     rows.push([data.org_name, data.title, data.owner_name, data.status, data.pipeline_id]);//your JSON entities here 
    } 
    } 
    Logger.log(JSON.stringify(rows,null,2)); // Log transformed data 

    return rows; 
}