javascript 从谷歌表单中删除URL参数数据

vhipe2zx  于 2023-05-12  发布在  Java
关注(0)|答案(1)|浏览(120)

我想知道如何从URL的参数值可以从页面加载的谷歌工作表中删除。
这个问题包含我用来添加数据的代码。
Send URL Parameters to Google Sheet on Page Load
如果来自URL的ONE参数已经在工作表中,则应删除整个ROW。

如果url为
https://example.com/test?email=john@test.com
电子表格看起来像
姓名|电子邮件
约翰|john@test.com
包含John和电子邮件的整行(在本例中)都应该被删除。
谢谢你

e4eetjau

e4eetjau1#

我相信你的目标如下。

  • 当您访问https://example.com/test?email=john@test.com时,您希望删除包含john@test.com的行。
  • 当我考虑你之前的问题时,我猜你的Javascript来自我的答案。Ref1Ref2

在这种情况下,下面的示例脚本如何?

示例脚本:

function doPost(e) {
  const sheetName = "Sheet1"; // Please set your sheet name.
  var email = e.parameter.email; // This is a value from the event object.

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  var ranges = sheet.getDataRange().createTextFinder(email).matchEntireCell(true).findAll();
  if (ranges.length == 0) {
    return ContentService.createTextOutput(`"${email}" was not found.`);
  }
  ranges.reverse().forEach(r => sheet.deleteRow(r.getRow()));
  return ContentService.createTextOutput(`Rows including "${email}" were deleted.`);
}
  • 当您访问https://example.com/test?email=john@test.com时,我以前的脚本会请求Web Apps。Ref1Ref2在Web应用程序端,运行上述示例脚本。并且,删除包括email的值的行。
  • 如果你想使用openById("###")而不是getActiveSpreadsheet(),请修改上面的脚本。

注意:

*当您修改Web Apps的Google Apps脚本时,请将部署修改为新版本。这样,修改后的脚本将反映在Web Apps中。请注意这一点

参考:

  • createTextFinder(findText)

新增:

从你下面的回复来看,
第二个页面只是用来从同一个工作表中删除数据,但是这与添加数据的页面没有任何关系。
如果你的第一页和第二页使用的是相同的doPost,我认为需要通过参数来运行脚本。它变成如下。

Google Apps脚本端:

function doPost(e) {
  const sheetName = "Sheet1"; // Please set your sheet name.

  const {email, sample} = e.parameter;
  if (sample == "delete") {
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
    var ranges = sheet.getDataRange().createTextFinder(email).matchEntireCell(true).findAll();
    if (ranges.length == 0) {
      return ContentService.createTextOutput(`"${email}" was not found.`);
    }
    ranges.reverse().forEach(r => sheet.deleteRow(r.getRow()));
    return ContentService.createTextOutput(`Rows including "${email}" were deleted.`);
  }

  // When the query parameter doesn't include `sample=delete`, the below script is run. Please set your script of doPost for 1st page.

}

HTML端:

<script>
if (performance.navigation.type != performance.navigation.TYPE_RELOAD) {

  const scriptURL = 'https://script.google.com/macros/s/###/exec'; // Please set your Web Apps URL.

  const queryParameters = [...new URLSearchParams(window.location.search).entries()];
  const data = new FormData();
  queryParameters.forEach(e => data.append(...e));
  fetch(scriptURL, { method: 'POST', body: data })
    .then(response => console.log('Success!', response))
    .catch(error => console.error('Error!', error.message))
}
</script>
  • 在这种情况下,当您使用浏览器访问https://example.com/test?email=john@test.com&sample=delete时,将运行删除行的脚本。当您使用浏览器访问https://example.com/test?email=john@test.com时,将运行除删除行脚本之外的脚本。

相关问题