2016-09-15 92 views
2

我正在制作一个定期写入SQL服务器的Google表格。这是我的代码到目前为止,少了SQL的东西。它抓取数据库中最后一个条目的一个变量(本次测试中的“用户”),并提交它后面的所有内容。JavaScript变量缺失值

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. 


} 

我从谷歌的错误得到的错误是:

The coordinates or dimensions of the range are invalid. (line 33, file "Code") 

使用调试工具,变“行”没有价值。但日志文件表明它的工作原理

[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”变量。我不知道如何解决这个问题。

+1

你为什么用方括号把'row = [i + 1]'和'var cfin = [Clast-row]你意识到会为你创建一个数组,对吗? – Jamiec

+0

看着你的double for循环看起来,行变量的值在找到目标值后被外层循环覆盖。找到值后,添加一个标志并跳出外部循环。 – Ma3x

回答

3

你似乎想要row是一个数字,但是你将它的计算包装在方括号中,给你一个长元素的数组。删除方括号。

row = i+1; 

(顺便说一句,你宣布它作为一个字符串,不会有所作为,但它能够更好地这样做!)

之后,你犯同样的错误与cfin 。不要把它包在方括号,如果你只是想一些

var cfin = Clast - row; 

如果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; 
    }