问题描述
最近有一个名为 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,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);
}
}
我可能还有多余的代码,但我对整体编码还很陌生。
感谢任何可以提供帮助的人! (此代码还有更多内容,但我需要它来启动它)
解决方法
我相信你的目标如下。
- 当您单击右箭头按钮时,您希望添加该行第 1 个空列中的值。
在您的脚本中,为了检索用于放置值的列的坐标,getLastColumn()
的用法如下。在这种情况下,不会检索该行的第一个空列。检索工作表的最后一列。那么,下面的修改怎么样?
来自:
var bottomrightcolumnNumber = eddGenSheet.getRange(lrwithcontentofEddGenSheet,1,lcwithcontentofEddGenSheet).getLastColumn();
致:
var bottomrightcolumnNumber = eddGenSheet.getRange(lrwithcontentofEddGenSheet - 1,1).getNextDataCell(SpreadsheetApp.Direction.NEXT).getColumn();
- 在此修改中,使用
getNextDataCell()
检索第一个空列。
注意:
- 我不确定您的实际情况。那么当上述修改对您的情况没有帮助时,您能否提供有关您实际情况的详细信息?为此,我想对其进行修改。