javascript - getlastrow,然后是最后一列,然后根据该信息进行填充
问题描述
最近有一个名为 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);
}
}
我可能也有冗余代码,但我对整个编码还是很陌生。
感谢任何可以提供帮助的人!(这段代码还有更多内容,但我需要它来启动它)
解决方案
我相信你的目标如下。
- 当您单击右箭头按钮时,您希望从该行的第一个空列中添加值。
在您的脚本中,为了检索用于放置值的列的坐标,getLastColumn()
使用如下。在这种情况下,不会检索该行的第一个空列。检索工作表的最后一列。那么,下面的修改呢?
从:
var bottomrightcolumnNumber = eddGenSheet.getRange(lrwithcontentofEddGenSheet,1,1,lcwithcontentofEddGenSheet).getLastColumn();
到:
var bottomrightcolumnNumber = eddGenSheet.getRange(lrwithcontentofEddGenSheet - 1, 1).getNextDataCell(SpreadsheetApp.Direction.NEXT).getColumn();
- 在此修改中,使用 检索第一个空列
getNextDataCell()
。
笔记:
- 我不确定你的实际情况。那么当上述修改对您的情况没有用时,您能否提供有关您实际情况的详细信息?通过这个,我想修改它。
参考:
推荐阅读
- javascript - Ramda or ES6 - Return the value of an Object Property, after filtering an Array of Objects
- java - MultiMC 加载完成后崩溃 7/7
- syntax - Fortran77 代码的问题 - 多行文本
- python-3.x - 来自文件的 Python 3 阅读列表 - 附加方括号和引号
- python - 如何清理列表
- javascript - 删除重复的元素
- safari - MacOS Catalina 上的端口转发以解决 DNS 问题
- java - 如何使用 gradle 运行主文件?
- c++ - 在 c 或 c++ 中,循环可以同时包含“do”和“while”部分吗?
- javascript - 未捕获的 SyntaxError:使用 processing.js 打开处理时出现意外标识符