【发布时间】:2014-03-04 00:49:45
【问题描述】:
我正在尝试创建一个 Google 表格脚本,该脚本将获取名称列表并将其重新发送到 Google 表格。我有两列数据,第一列包含人名。第二列包含多个单元格,第一个单元格中的人邀请参加聚会。这会产生一个问题,第 1 列中的名称可能在第 2 行,但如果他们邀请 20 人,则第 1 列的第 3-21 行有空格。现在对你们大多数人来说可能听起来毫无意义,但我希望能够按邀请人姓名的字母顺序对工作表进行排序,并且能够按客人姓名的字母顺序将其排序到单独的工作表中在第 2 列中,同时仍然跟踪邀请他们的人。这是我能想到的完成任务的唯一方法。
我目前正坚持将数组写回工作表,我不断收到“范围高度不正确,为 1 但应该为 339”。我已经想出了如何成功获取一组数据,完全按照我想要的方式填充,但似乎无法获得这部分。我在这里搜索并尝试实施我找到的解决方案,但没有运气。
这是我到目前为止想出的,它一直有效,直到 setValues(
function inviteSorter() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var current = sheet.getSheets()[0];
var lastRow = current.getLastRow();
var rangeData = current.getRange(2,1,lastRow-1,3);
var numColumns = rangeData.getNumColumns();
// Logger.log(rangeData);
var info = rangeData.getValues();
var Name = {};
// Examines the cell in the first column, if it is empty replaces it with the name from the previous cell.
for ( var i = 0; i< info.length; i++){
if (typeof(info[i][0]) == "string" && info[i][0] == ""){
Name[i] = Name[i-1];
} else{
Name[i] = info[i][0];
}
}
var data = []
for (var i = 0; i<lastRow-1; i++){
data.push(Name[i]);
}
var writeRange = current.getRange(2,1,data.length,1);
writeRange.setValues([data]);
【问题讨论】:
-
希望这会有所帮助。也许你的最后一行应该是 writeRange.setValues(data); .. 但是从你正在学习如何编程的东西的外观来看,这不是一个获得帮助的好地方。祝你好运。
-
我承认我对这一切都有基本的了解,但对概念的掌握程度足以让我在大多数情况下都能实现我想要的。我通常会挂断我看不正确的事情。我知道我需要将我的数组“转置”为列格式,但我没有看到明显的解决方案。我的原始代码是你的建议,我得到了一个数组错误的对象。我的代码本来可以工作,除非我试图将一行数据写入一列。就像我说的那样,我明白了概念,但有时我只是被挂断了。
-
感谢您的建议。抱歉,如果那是敌对的,请重新阅读它。
-
我有一个调试的基本规则。收集更多信息:所以......添加日志,使用调试器,更改我的代码,修改一个工作示例。我的但是,我有太多的,总是由于缺乏信息造成的。 .... 很高兴你找到了它的底部。