Javascript 重新分配/更新变量

Javascript 重新分配/更新变量,javascript,variables,google-apps-script,google-sheets,Javascript,Variables,Google Apps Script,Google Sheets,我试着在网上搜索,但只能找到如何重新分配单元格值 我的代码的一点背景: 输入表包含A列到U列中的数据,但R列和S列故意为空。我只需要设置和排序从A列到Q列的数据范围,每次运行代码时,行数可能会改变(因此行索引需要是动态的)。当我运行代码时,变量不会更新,也不会出现任何错误。为什么代码没有为输入数据更新我的变量。任何帮助都将不胜感激 谢谢 function SortUpdate() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var

我试着在网上搜索,但只能找到如何重新分配单元格值

我的代码的一点背景:

输入表包含A列到U列中的数据,但R列和S列故意为空。我只需要设置和排序从A列到Q列的数据范围,每次运行代码时,行数可能会改变(因此行索引需要是动态的)。当我运行代码时,变量不会更新,也不会出现任何错误。为什么代码没有为输入数据更新我的变量。任何帮助都将不胜感激

谢谢

function SortUpdate() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var input = ss.getSheetByName("Input");
  var inputData = input.getDataRange();
  var lastRow = inputData.getNumRows();
  inputData = input.getRange(2, 1, lastRow, 17);
  for(var i = 9; i<=(15);i++){
     inputData.sort({column: i, ascending: false});
  }
}
函数SortUpdate(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var input=ss.getSheetByName(“输入”);
var inputData=input.getDataRange();
var lastRow=inputData.getNumRows();
inputData=input.getRange(2,1,lastRow,17);

对于(var i=9;i,到目前为止,您已为inputData分配了两个不同的范围,但尚未收集任何数据。请查看range.getValues()函数

我将该命令放入下面的函数中。您将无法运行该命令,因为我正在使用自己的一些实用程序将全局变量存储在文件的数组中,以便每次运行时都可以将升序参数在true和false之间切换。但这就是它的外观,它肯定是对a到Q列进行排序不包括标题行

function SortUpdate() 
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var input = ss.getSheetByName("Input");
  var inputData = input.getDataRange();//This returns a range not data
  var lastRow = inputData.getNumRows();
  inputData = input.getRange(2, 1, lastRow, 17);//The inputData variable has received two assignments which one do you want?
  var dirA=myUtilities.getArrayByName('Params');
  inputData.sort([{column: 9, ascending: dirA.state=='true'},{column: 10, ascending: dirA.state=='true'},{column: 11, ascending: dirA.state=='true'},{column: 12 , ascending: dirA.state=='true'},{column: 13, ascending: dirA.state=='true'},{column: 14, ascending: dirA.state=='true'},{column: 15, ascending: dirA.state=='true'}]);
  dirA['state'] = (dirA['state']=='true')?false:true;
  myUtilities.saveArray('Params', 'DICT', dirA);
}

您可以使用sheet.getLastRow()方法代替sheet.getDataRange()和sheet.getNumRows(),该方法将返回工作表上使用的最后一行的值。有关getLastRow方法的详细信息:


对于排序方法部分,您可以使用Cooper编写的正在运行的代码,或者向我们发送一个示例,说明您需要哪种排序方法。

谢谢,@Cooper!我希望这些是范围,而不是值。基本上,我试图说,“在本表中的所有数据中,只操作a列到Q列中的值。”但是因为.getRange()需要一个结束行,我必须首先找到该结束行所在的位置。然后,一旦我找到该结束行,我就可以使用更新的范围重新分配inputData。这有意义吗?是的,这似乎是一种合理的方式。您的排序工作完成了吗?
inputData.sort([{column: 9 ascending: false},{column: 10, ascending: false},{column: 11, ascending: false},{column: 12 , ascending: false},{column: 13, ascending: false},{column: 14, ascending: false},{column: 15, ascending: false}]);    
function SortUpdate() 
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var input = ss.getSheetByName("Input");
  var inputData = input.getDataRange();//This returns a range not data
  var lastRow = inputData.getNumRows();
  inputData = input.getRange(2, 1, lastRow, 17);//The inputData variable has received two assignments which one do you want?
  var dirA=myUtilities.getArrayByName('Params');
  inputData.sort([{column: 9, ascending: dirA.state=='true'},{column: 10, ascending: dirA.state=='true'},{column: 11, ascending: dirA.state=='true'},{column: 12 , ascending: dirA.state=='true'},{column: 13, ascending: dirA.state=='true'},{column: 14, ascending: dirA.state=='true'},{column: 15, ascending: dirA.state=='true'}]);
  dirA['state'] = (dirA['state']=='true')?false:true;
  myUtilities.saveArray('Params', 'DICT', dirA);
}