0

Sorry for the probably simple question. My team set up an API on our server for us to get on google sheet.

After using Postman I can see my data comes properly like this

  {
    "msg": "success",
    "code": 0,
    "data": [
        {
            "Domain": "test-shop",
            "packageId": "XXX12345",
            "orderNumber": "123456-7890",
            "sku": null,
            "quantity": 1,
            "country": "DENMARK",
            "customerName": "James Andersen",
            "shippingMethod": "UPS",
            "trackingNumber": "UP2100421266111769",
            "orderDate": "2021-01-03 21:44:36",
            "cost": 9.32,
            "euCustomsFee": 0,
            "totalCost": 9.32
        }
    ]
}

I need to get this into a google sheet where each object is a column. Over time the arrays will have more than one response.

I have been tryng with this script but get an error that setValues([number]) doesnt match the required signature foor setValues.

Currently I am generating the HTTP request on a link on the spreadsheet to try to limit the calculations ons the script since I am expecting this function to get to the 5 min limit.

function importcogs() {
  Logger.log("import begin");
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var urlsheet = ss.getSheetByName("GetInfo");
  var request = urlsheet.getRange(5,2).getValue();
  Logger.log(request);

  var response = UrlFetchApp.fetch(request);
  Logger.log("download data finish");
  Logger.log(response.getContentText());

  
  var sheet = ss.getSheetByName("Data");
  var jsonData = JSON.parse(response);
  Logger.log("Split Data");
  Logger.log(jsonData);
  Logger.log(jsonData.data);
  
  sheet.getRange(1,1,1,13).setValues(jsonData.data);


}  

1 Answer 1

1

Response to Spreadsheet

function importcogs() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName("Sheet0");
  let response = '{"msg":"success","code":0,"data":[{"Domain":"test-shop","packageId":"XXX12345","orderNumber":"123456-7890","sku":null,"quantity":1,"country":"DENMARK","customerName":"JamesAndersen","shippingMethod":"UPS","trackingNumber":"UP2100421266111769","orderDate":"2021-01-0321:44:36","cost":9.32,"euCustomsFee":0,"totalCost":9.32}]}';
  let obj = JSON.parse(response);//create object
  let vs = obj.data.map(o => Object.values(o));//data
  vs.unshift(Object.keys(obj.data[0]));//add header
  sh.getRange(1,1,vs.length, vs[0].length).setValues(vs);//output to spreadsheet
}

Spreadsheet Output

Domain packageId orderNumber sku quantity country customerName shippingMethod trackingNumber orderDate cost euCustomsFee totalCost
test-shop XXX12345 123456-7890 1 DENMARK JamesAndersen UPS UP2100421266111769 2021-01-0321:44:36 9.32 0 9.32

Object.keys()

Object.values()

Sign up to request clarification or add additional context in comments.

2 Comments

Would it be possible to have let response be generated rather than hard coding it?
Sure. I was just working with what you gave me

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.