【问题标题】:Write data to a cell on the last row with text (instead of appendRow)使用文本将数据写入最后一行的单元格(而不是 appendRow)
【发布时间】:2019-05-25 18:11:47
【问题描述】:

我正在使用 Siri 快捷方式将带有谷歌脚本的数据输入到谷歌表格。我找到了添加数据的方法,但它使用 appendRow 将数据添加到新行。

我正在运行 2 个脚本,其中一个将数据添加到新行的前三列。

我希望下一个脚本在接下来的 2 列中写入数据,而不是从新行开始,但我不知道该怎么做。

我完全不知道我在做什么,我对编码很陌生,所以对于所有的麻烦,我深表歉意。

我搜索并遇到了脚本以找到包含数据的最后一行,但我不知道如何向其中添加数据。

我找到了这个页面,但我仍然不知道: Determining the last row in a single column

这是我用来将数据添加到新行的前 3 列的代码:

var ss = SpreadsheetApp.openById("").getSheetByName('');


function doGet(e) {

  var mood = JSON.parse(e.parameters.mood)

  var formattedTime = Utilities.formatDate(new Date(), "GMT+530", "h:mm a");
  var formattedDate = Utilities.formatDate(new Date(), "GMT+530", "MM/dd/yyyy");

 ss.appendRow([formattedDate,formattedTime,mood]);

}

【问题讨论】:

  • 您的问题似乎暗示您认为 appendRow() 不会处理文本。这是不正确的。它只是不复制格式。

标签: google-apps-script google-sheets sirishortcuts


【解决方案1】:

有多种方法可以实现您的需求,其中一种是构建一个可自定义的函数,将数据插入工作表的最后一行:

/**
 * Gets Sheet by its name from a Spreadsheet (by id);
 * @param {String} id Spreadsheet's id;
 * @param {String} name Sheet name;
 * returns {Sheet} this sheet;
 */
function getSheet(id,name) {
  var ss = SpreadsheetApp.openById(id);
  var sh = ss.getSheetByName(name);
  return sh;      
}

//test function;
function testInsert() {
  var sh = getSheet('yourSpreadsheetId','yourSheetName');
  var data = [1,2,3,4,5,7]; //an array of values;
  insert(sh,data,1);
}

/**
 * Inserts values to the last row;
 * @param {Sheet} sheet to use;
 * @param {Array} array of values to set;
 * @param {Integer} startCol column to start from;
 */
function insert(sheet,data,startCol) {
  var lrow   = sheet.getLastRow();
  var lrange = sheet.getRange(lrow,startCol,1,data.length)
  lrange.setValues([data]);
}

【讨论】:

  • getSheet() 应该写什么?我搜索了但没有找到任何东西,全局变量是什么?
  • 全局变量是您在函数范围之外定义的变量 - 在您的示例代码中,您将工作表写入ss,只需引用它而不是 sh ( getSheet() 可以是任何获取和返回的函数电子表格)
  • 我已经用一个函数示例更新了答案,该函数可以获取您需要的工作表 - 通常最好将获取资源的逻辑保留在您可以按需重用的函数中跨度>
  • 非常感谢您的详细回复。我现在可以在我喜欢的列上获取数组值。但是如何将 JSON 响应添加到保存 var data = [1,2,3,4,5,7] 的位置?我尝试研究,他们正在谈论将其转换为二维数组?也许我应该把这个作为一个不同的问题来问?
  • 我的代码隐式地将一维数组转换为二维,所以不用担心。如果我理解正确,只需在您的 doGet() 函数中调用 insert() 并将您的数组作为第二个参数 - 还是您的意思是别的?
猜你喜欢
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
  • 1970-01-01
  • 2021-11-22
相关资源
最近更新 更多