如何在Google App脚本中求和范围列

时间:2018-09-27 16:46:37

标签: javascript google-apps-script

library(plotly)
library(shiny)
library(DT)


ui <- fluidPage(

    mainPanel(
         plotlyOutput("SepalPlot"),
         DT::dataTableOutput("Sepal"),
         plotlyOutput("PetalPlot"),
         DT::dataTableOutput("Petal")
    )
)


server <- function(input, output) {

   output$SepalPlot<- renderPlotly({
     plot_ly(iris, x = ~Sepal.Length, y = ~Sepal.Width, type = 'scatter', mode = 'markers')
   })

   sep<-data.frame(c(iris$Sepal.Length, iris$Sepal.Width))
   output$Sepal<-renderDataTable({datatable(sep)})

   output$PetalPlot<- renderPlotly({
     plot_ly(iris, x = ~Petal.Length, y = ~Petal.Width, type = 'scatter', mode = 'markers')
   })

   pet<-data.frame(c(iris$Petal.Length, iris$Petal.Width))
   output$Petal<-renderDataTable({pet})
}


shinyApp(ui = ui, server = server)

这是代码:

J    
1    
2    
3    

结果脚本= function sumsald () {    var ss = SpreadsheetApp.getActiveSpreadsheet ();    var s1 = ss.getSheetByName ("rendPendForm");    var dataRange = s1.getDataRange ();    var lastrow = dataRange.getLastRow ();    var values = s1.getRange (2.10, lastrow, 1) .getValues ();         var sum = 0;                 for (var i = 0; i <values.length; i ++) {             result = values [i] [10] + sum;             Logger.log (result);      }      s1.getRange (i + 1, 10) .setValue (result);   }
# NUM! = Logger.log

6个预期

谢谢路易斯。

1 个答案:

答案 0 :(得分:1)

不确定示例中的J是第一行的列名还是值。无论如何,要获取从J列的第一行一直到索引lastrow的行的值:

var values = s1.getRange (1, 10, lastrow, 1) .getValues ();

此外,当将数字相加时,忽略非数字值是有好处的。例如,如果您将标题行中的字符串与下面一行中的数字相加,则会在Javascript / GoogleScript中获得两者的串联字符串,而不是错误或忽略该字符串。仅当values[i][0]包含数字(否则将0添加到总和即不执行任何操作)时,这才追加到总和:

result += typeof values[i][0] == 'number' ? values[i][0] : 0;

下面是完整示例:

function sumsald () {
  var ss = SpreadsheetApp.getActiveSpreadsheet ();
  var s1 = ss.getSheetByName ("rendPendForm");
  var dataRange = s1.getDataRange ();
  var lastrow = dataRange.getLastRow ();
  var values = s1.getRange (1, 10, lastrow, 1) .getValues ();
  var result = 0;
  for (var i = 0; i <values.length; i ++) {
    result += typeof values[i][0] == 'number' ? values[i][0] : 0;
    Logger.log (result);
  }
  s1.getRange (i + 1, 10) .setValue (result);
}