1

最近有一个名为 Eddienuput ( https://github.com/nirgoren/Eddienput ) 的程序可以让你在训练模式下正确地训练基本上任何东西。一个问题是您必须制作一个包含所有按钮按下的文本文件,以及每个按钮的时间。一旦这个文本文件被制作成一个预制的 Json 广告它并将输入输入到虚拟控制器中

该工作表可以在这里看到它的工作形式 https://docs.google.com/spreadsheets/d/1HJ8PZ-zwsYDznvLleIozhg88K70ySXz0rF4fiU9uN4E/edit#gid=461565895

这里的想法是将角色的数据放在第二个选项卡上,然后在生成器表上选择所需的按钮,然后按 [>] 将其放在当前存储的按钮的右侧,然后使用[v] 按钮

但是,使用我当前的代码,正在发生一些错误。

当我点击向下箭头(我已将脚本分配给按钮)时,程序注册输入所需的三个条目将插入活动行下方的一行。

问题是右箭头。我有点正确(它将所需的三个输入放在右边..但它没有找到右下角的条目并将其放在它的右侧,而是寻找最右边的列并将其放置在所有内容的右侧,而不是在最后一行的最后一个单元格旁边。

这是我现在拥有的代码:

function addbuttontoString()
{
  //DEFINE ALL ACTIVE SHEETS
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var eddGenSheet = ss.getSheetByName("Eddie Input Generator");
  var lrwithcontentofEddGenSheet = eddGenSheet.getLastRow()+1;
  var lcwithcontentofEddGenSheet = eddGenSheet.getLastColumn();

  var CharacterFrameDataSheet = ss.getSheetByName("CharacterFrameData");
  
  //Current string Variables 
  var totalcurrentstringRows = lrwithcontentofEddGenSheet-4;
  var fullcurrentString = eddGenSheet.getRange(5,1,totalcurrentstringRows, lcwithcontentofEddGenSheet);

  var cslastRow = fullcurrentString.getLastRow();
  var bottomrightcolumnNumber = eddGenSheet.getRange(lrwithcontentofEddGenSheet,1,1,lcwithcontentofEddGenSheet).getLastColumn();


Logger.log(bottomrightcolumnNumber)
  //GET LAST ROW #OF ITEM SHEET
  var lastrowItem = CharacterFrameDataSheet.getLastRow();
  
  // Get the perfect Eddie value from Character Frame Data you are grabbing data for
  var button = eddGenSheet.getRange('B4').getValue();
  
  // Set up the Perfect Frame Variable
  for(var i = 2; i <= lastrowItem; i++)
  {
    if(button == CharacterFrameDataSheet.getRange(i, 1).getValue())
    {
      var Perfectframe = CharacterFrameDataSheet.getRange(i, 4).getValue();
    }
  }
  Logger.log(fullcurrentString.isBlank());

  if(fullcurrentString.isBlank()){
  // POPULATE eddGen SHEET Same Line
  eddGenSheet.getRange("A5").setValue(button);
  eddGenSheet.getRange("B5").setValue("F");
  eddGenSheet.getRange("C5" ).setValue(Perfectframe);
  } else {
  eddGenSheet.getRange(lrwithcontentofEddGenSheet-1, bottomrightcolumnNumber +1).setValue(button);
  eddGenSheet.getRange(lrwithcontentofEddGenSheet-1, bottomrightcolumnNumber +2).setValue("W");
  eddGenSheet.getRange(lrwithcontentofEddGenSheet-1, bottomrightcolumnNumber +3).setValue(Perfectframe);
  }
}

我可能也有冗余代码,但我对整个编码还是很陌生。

感谢任何可以提供帮助的人!(这段代码还有更多内容,但我需要它来启动它)

4

1 回答 1

0

我相信你的目标如下。

  • 当您单击右箭头按钮时,您希望从该行的第一个空列中添加值。

在您的脚本中,为了检索用于放置值的列的坐标,getLastColumn()使用如下。在这种情况下,不会检索该行的第一个空列。检索工作表的最后一列。那么,下面的修改呢?

从:

var bottomrightcolumnNumber = eddGenSheet.getRange(lrwithcontentofEddGenSheet,1,1,lcwithcontentofEddGenSheet).getLastColumn();

到:

var bottomrightcolumnNumber = eddGenSheet.getRange(lrwithcontentofEddGenSheet - 1, 1).getNextDataCell(SpreadsheetApp.Direction.NEXT).getColumn();
  • 在此修改中,使用 检索第一个空列getNextDataCell()

笔记:

  • 我不确定你的实际情况。那么当上述修改对您的情况没有用时,您能否提供有关您实际情况的详细信息?通过这个,我想修改它。

参考:

于 2021-04-15T03:12:44.597 回答