我有一个Google表格电子表格,其中包含第一列中的标识符列表(例如COLTS或RAMS)。然后使用Google Apps脚本我从API获取这些标识符的事务数据(每个标识符有多个事务)。该数据如下所示:
{
"sportsfolio_transactions":[
{
"trans_date":"06/26/2017 9:58:00 AM",
"amount":-10.30,
"trans_type_id":1,
"trans_type_name":"Buy",
"stock_id":"COLTS",
"shares":3
},
{
"trans_date":"04/25/2017 2:58:00 AM",
"amount":-3.22,
"trans_type_id":1,
"trans_type_name":"Buy",
"stock_id":"COLTS",
"shares":1
}
{
"trans_date":"05/20/2017 2:58:00 AM",
"amount":-30.22,
"trans_type_id":1,
"trans_type_name":"Buy",
"stock_id":"RAMS",
"shares":9
}]}
我到目前为止的代码过滤了买入交易,看起来像这样:
var response = UrlFetchApp.fetch(url, options);
var json = response.getContentText();
var data = JSON.parse(json);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('apidata'); active spreadsheet
var output = [];
data["sportsfolio_transactions"].forEach(function(elem,i) {
output.push([elem["stock_id"],elem["shares"],elem["trans_type_name"],elem["trans_date"],elem["amount"]]);
});
var outputbuy = [];
data["sportsfolio_transactions"].forEach(function(element,i) {
if(element["trans_type_name"] == "Buy") {
outputbuy.push([element["stock_id"],element["shares"],element["trans_type_name"],element["trans_date"],element["amount"]]);
}
});
现在我想将最新交易的日期放在每个标识符旁边。 例如。根据以上数据,COLTS旁边的日期应为06/26/2017
经过几个小时的尝试(math.max,排序等),我没有想法,希望你能在这里帮助我。哦,如果你看到发布的代码有任何可能的改进,当然也非常感谢。
答案 0 :(得分:0)
管理以解决问题,等等。只能查看“买入”交易,无法获得“买入”|| “卖”才能正常工作。
此外,这段代码似乎效率低下,但它是我能够制作的最好的代码。关于如何提高效率的任何想法?
以下是代码:
function getLastTrade() {
var url= 'https://asmwebdev1.azurewebsites.net/api/get_sportsfolio_transactions/'
var today = new Date()
var enddate = Utilities.formatDate(today,"GMT", "MM/dd/YYYY");
var formData = {
'email': 'xxxxx',
'password': 'x',
'sportsfolio_key': '9657',
'start_date': '01/01/2017',
'end_date': enddate,
};
var options = {
'method' : 'post',
'payload' : formData
};
var response = UrlFetchApp.fetch(url, options);
var json = response.getContentText();
var data = JSON.parse(json);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('apidata');
var Avals = ss.getRange("A2:A50").getValues();
var Alast = Avals.filter(String).length;
for(var row=2;row<Alast+2;row++){
var oldestdate = new Date(0)
data["sportsfolio_transactions"].forEach(function(element,i) {
var lastid = sheet.getRange(row, 1).getValues();
if(element["stock_id"] == lastid && element["trans_type_name"] == "Buy"){
var newestdate = new Date(element["trans_date"])
if(newestdate>oldestdate) {
oldestdate = newestdate
}
sheet.getRange(row,6).setValue(oldestdate)
}
});
}
}
API返回的数据包含数百个事务,上面的帖子中可以看到一个小样本。