我正在使用Sheetrock.js查询并显示附加到表单的 Google 表格中的数据。问题是我需要能够通过 Timestamp 列搜索工作表,而我只能通过将 Timestamp 转换为纯文本(否则查询结果为空表)来使用 Sheetrock 来执行此操作。将列预格式化为纯文本不起作用,因为格式会被任何新的表单提交覆盖。
我在时间戳右侧添加了第二列,以便将日期时间显示为纯文本,并使用此列查询工作表。我能够编写一个脚本,找到工作表中的最后一行(可能是最新的),将时间戳转换为字符串,并使用表单提交触发器将其写入下一列;然而,由于我编写表单脚本的方式(每次提交都会发送多行,所有行都具有相同的时间戳),这会在列中留下很多空单元格。例如,我将收到具有相同时间戳的三个新提交,但只有最后一个运行该函数,因为从技术上讲,所有三个提交共享相同的触发器。
现在(TL;DR),我正在尝试编写一个脚本来查找 B 列中的空单元格,找到 A 列(时间戳)中的相邻单元格,将其转换为字符串,并将结果写入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);
}
...但我在修复它方面并没有取得太大进展。任何见解或指示将不胜感激!
最佳答案
最好的选择是在提交表单时将第一列的格式转换为文本。
function OnSubmit(e){
var sheetDatabase = SpreadsheetApp.openById("<<SPREADSHEET ID>>").getSheetByName("Sheet1")
sheetDatabase.getRange("A:A").setNumberFormat("@");
}
关于google-apps-script - 使用 Google 脚本将列中空单元格的值设置为相邻列中的日期(作为字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45575727/