Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script Google脚本中的插值函数_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script Google脚本中的插值函数

Google apps script Google脚本中的插值函数,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我正在使用谷歌表格记录我的用水情况,并希望通过使用线性插值找出我在给定时期内的用水量。我真的很想使用一个类似于预测的函数,但不是使用整个范围进行插值,而是使用上面和下面最近的点 我热衷于自己编写代码(做了很多VBA),但不知道从哪里开始使用google脚本。有人给我一个起点吗 我将采取的程序是: Interpolate(x, data_y, data_x) // Check value is within range of known values (could expand functio

我正在使用谷歌表格记录我的用水情况,并希望通过使用线性插值找出我在给定时期内的用水量。我真的很想使用一个类似于预测的函数,但不是使用整个范围进行插值,而是使用上面和下面最近的点

我热衷于自己编写代码(做了很多VBA),但不知道从哪里开始使用google脚本。有人给我一个起点吗

我将采取的程序是:

Interpolate(x, data_y, data_x)


// Check value is within range of known values (could expand function to use closet two values and extrapolate...)
(is X within XMin and XMax)

// Find closet X value below (X1), corresponding Y1

// Find closet X value above (X2), corresponding Y2

Return Y = Y1+(X-X1)*((Y2-Y1)/(X2-X1))
函数插值(x_范围、y_范围、x_值){
var xValue,yValue,xDiff,yDiff,xInt,index,check=0;
如果(x_值>数学最大应用(数学,x_范围)| x|u值<数学最小应用(数学,x_范围)){
抛出“值不能插值!!”;
返回;
}
对于(变量i=0,iLen=x_range.length;i=x_值和x_范围[i+1][0]
函数插值(x\u范围、y\u范围、x\u值){
var xValue,yValue,xDiff,yDiff,xInt,index,check=0;
如果(x_值>数学最大应用(数学,x_范围)| x|u值<数学最小应用(数学,x_范围)){
抛出“值不能插值!!”;
返回;
}
对于(变量i=0,iLen=x_range.length;i=x_值和x_范围[i+1][0]
Google应用程序脚本使用JavaScript。这可能有助于回答您的问题。您可能希望启动,然后谷歌应用程序脚本使用JavaScript。这可能有助于回答您的问题。您可能希望先开始,然后此骨骼(代码)上的一些肉(解释/关键点/流)会走很长的路。此骨骼(代码)上的一些肉(解释/关键点/流)会走很长的路。
function interpolation(x_range, y_range, x_value) {
  var xValue, yValue, xDiff, yDiff, xInt, index, check = 0;
  if(x_value > Math.max.apply(Math, x_range) || x_value < Math.min.apply(Math, x_range)) {
    throw "value can't be interpolated !!";
    return;
  }
  for(var i = 0, iLen = x_range.length; i < iLen-1; i++) {
    if((x_range[i][0] <= x_value && x_range[i+1][0]> x_value) || (x_range[i][0] >= x_value && x_range[i+1][0] < x_value)){
      yValue = y_range[i][0];
      xDiff = x_range[i+1][0] - x_range[i][0];
      yDiff = y_range[i+1][0] - yValue;
      xInt = x_value - x_range[i][0];
      return (xInt * (yDiff / xDiff)) + yValue;
    }
  }
  return y_range[x_range.length-1][0];
}