Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.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
JavaScript变量缺少值_Javascript_Google Sheets - Fatal编程技术网

JavaScript变量缺少值

JavaScript变量缺少值,javascript,google-sheets,Javascript,Google Sheets,我正在制作一个定期写入SQL server的google工作表。这是我到目前为止的代码,少了SQL的东西。它从数据库中的最后一个条目(“本测试中的用户”)中获取一个变量,并在它之后提交所有内容 function connectToMySqlDB() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var dataRange = sheet.getDataRange(

我正在制作一个定期写入SQL server的google工作表。这是我到目前为止的代码,少了SQL的东西。它从数据库中的最后一个条目(“本测试中的用户”)中获取一个变量,并在它之后提交所有内容

function connectToMySqlDB() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var dataRange = sheet.getDataRange();
  var values = dataRange.getValues();
  var lastColumn = sheet.getLastColumn();
  Logger.log('Starting query process... ');

//  Connect to DB and get last entry
  var lastline = "User"
  Logger.log('Found serial number of last enter in SQL Database: ' + lastline);

//  Find row of entry in goolge sheet
  for (var i = 0; i < values.length; i++) {
    var row = "";
    for (var j = 0; j < values[i].length; j++) {     
      if (values[i][j] == lastline) {
        row = [i+1]
        Logger.log('Found serial number in row: ' + row);
      }
    }    
  }  

//  Get first unfilled row
  var crange = sheet.getRange("C1:C").getValues();
  var Clast = crange.filter(String).length;
  Logger.log('Found last row in C: ' + Clast);
  var cfin = [Clast - row]
  Logger.log('Slection will be: ' + row + ' rows.');

// select rows from entry to last filled row
  var selection = sheet.getRange(row,0,cfin,lastColumn)


//  Submit rows line by line to DB (from last entry to first unfilled)


//  Write one row of data to a table.


}
使用调试工具,变量“row”没有值。但是,日志文件显示它确实有效

[16-09-15 11:39:41:063 PDT] Starting query process... 
[16-09-15 11:39:41:064 PDT] Found serial number of last enter in SQL Database: User
[16-09-15 11:39:41:067 PDT] Found serial number in row: 26
[16-09-15 11:39:41:157 PDT] Found last row in C: 37
[16-09-15 11:39:41:158 PDT] Selection will be:  rows.

我猜想“var cfin=[Clast-row]”正在清除“row”变量。我一辈子都想不出如何解决这个问题。

您似乎希望
是一个数字,但您将它的计算包装在方括号中,给您一个一个元素长的数组。拆下方形支架

row = i+1;
(顺便说一句,您将其声明为字符串,这不会产生任何影响,但最好不要这样做!)

之后,您在使用
cfin
时也犯了同样的错误。如果你只是想要一个数字,不要用大括号括起来

var cfin = Clast - row;

如果通过查找设置了
,则也可能存在问题,但外部循环将重置该变量。您可以通过打破两个循环来解决此问题:

var row = -1;
for (var i = 0; i < values.length; i++) {
    for (var j = 0; j < values[i].length; j++) {     
      if (values[i][j] == lastline) {
        row = i+1
        Logger.log('Found serial number in row: ' + row);
        break;
      }
    }    
    if(row > -1) break;
  }  
var行=-1;
对于(变量i=0;i-1)中断;
}  

为什么要用方括号包装
行=[i+1]
var cfin=[clat-row]
?您意识到这将创建一个数组,对吗?查看double for循环,在找到目标值后,行变量的值似乎会被外部循环覆盖。在找到值后,添加一个标志并中断外部循环。
var row = -1;
for (var i = 0; i < values.length; i++) {
    for (var j = 0; j < values[i].length; j++) {     
      if (values[i][j] == lastline) {
        row = i+1
        Logger.log('Found serial number in row: ' + row);
        break;
      }
    }    
    if(row > -1) break;
  }