使用Google Script将相邻列中的空单元格的值设置为相应列中的字符串

时间:2017-08-08 18:36:34

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

我使用Sheetrock.js查询并显示附加到表单的Google表格中的数据。问题是我需要能够通过Timestamp列搜索工作表,我只能通过将Timestamp转换为纯文本来与Sheetrock一起执行此操作(否则查询将导致空表)。将列预格式化为纯文本不起作用,因为格式会被任何新表单提交覆盖。

我已在时间戳右侧添加了第二列,以便在此处以纯文本形式显示日期时间,并使用此列查询工作表。我能够编写一个脚本来查找工作表中的最后一行(可能是最新的),将Timestamp转换为字符串,并使用表单提交触发器将其写入下一列;但是由于我编写表单的方式(每个提交都发送了多行,所有提交时间都相同),这会在列中留下很多空单元格。例如,我将收到三个具有相同时间戳的新提交,但只有最后一个提交运行该功能,因为从技术上讲,所有三个提交都共享相同的触发器。

所以现在(TL; DR),我试图编写一个脚本来查找B列中的空单元格,找到A列中的相邻单元格(Timestamp),将其转换为字符串,然后编写结果在B栏中。我尝试了很多不同的方法,但我对Google Script的熟练程度并不是我喜欢的。 这就是我之前的工作:

function lastValue(column) {
  var lastRow = SpreadsheetApp.getActiveSheet().getMaxRows();
  var values = SpreadsheetApp.getActiveSheet().getRange(column + "1:" + column + lastRow).getValues();

  for (; values[lastRow - 1] == "" && lastRow > 0; lastRow--) {}
  return values[lastRow - 1];
}

function lastCell(column) {
  var lastRow = SpreadsheetApp.getActiveSheet().getMaxRows();
  var values = SpreadsheetApp.getActiveSheet().getRange(column + "1:" + column + lastRow).getValues();

  for (; values[lastRow - 1] == "" && lastRow > 0; lastRow--) {}
  return lastRow;
}

function formatDate () { //Triggered on form submit
   var value = lastValue("A");

   var string = value.toString();
   var cell = "B" + lastCell("A");

   SpreadsheetApp.getActiveSheet().getRange(cell).setValue(string); 
} 

...但我还没有在修复它方面取得很大进展。任何见解或指示都将非常感激!

1 个答案:

答案 0 :(得分:2)

最佳选择是在提交表单时将第一列的格式转换为文本。

hive.exec.dynamic.partition.mode