当前位置: 首页 > 知识库问答 >
问题:

查找并选择一个单元格基于URL在谷歌工作表

游皓
2023-03-14

我使用谷歌表单制作了一个简单的基于表单的化学品数据库。该表如下所示:https://docs.google.com/spreadsheets/d/e/2PACX-1vR0-AMEKNM3ZbDq67OIKWnc7E3KP8kfOsnr0Bjg2OSjpevLLjniknGXfIiiyZvbwE9bz3EfbOpO46ef/pubhtml?gid=292509613

有许多行和列。用户可以使用如下url链接更改单元格的值https://docs.google.com/spreadsheets/d/13sLioJr_T6lqQ7y_pStBR8CKxReYwLUn4hao/edit#gid=292509613

该链接被转换为二维码,供需要从手机远程更改手机价值的人使用,而无需手动搜索特定化学品

当有人引入新行时,问题就开始了,然后每个单元格的位置都改变了,现在所有的url(即打印的QR码)都选择了错误的化学品。现在所有的URL都错了,我必须手动修复这个问题,并将新行移到表的底部

理想情况下,我希望选择一个单元格,其查询基于化学品的ID(在本例中为cp1000)类似于(伪代码)docs.google.com/spreadsheets/d/13sLioJr..../edit#gid=292509613

成功结果的一个例子是根据A列选择B列中的单元格

在伪代码中:

 cell = Cell()
 id = query.exctract_id()
 for n in range(1,max_row):
    if cell(column_number = 'A', row_number = n).value == id:
        select cell(column_number ='B', row_number = n)
        break

是否有任何方法可以将其写入URL?

共有2个答案

袁增
2023-03-14

您可以构建一个web应用程序,根据条件语句的结果重定向到所需的单元格。

您可以将每个二维码设置为包含化学品ID作为URL参数,然后根据参数加载工作表:

示例Web-App URL:

https://script.google.com/a/google.com/macros/s/<web-app-ID>/exec?chemNo=cp1000

应用程序脚本代码:

function doGet(e){
  var sheetUrl = "<your-spreadsheet-URL-with-gid>";
  var cell = getCell(e.parameter.chemNo, url);

  return HtmlService.createHtmlOutput('<script>window.location.replace("' + sheetUrl + '&range=' + cell + '"</script>');
}

function getCell(chemNo, url){
  
  //get the first sheet of your 
  var sheet = SpreadsheetApp.openByUrl(url).getSheets()[0];
  var lastRow = sheet.getLastRow();
  var range = sheet.getRange('A1:A' + lastRow).getValues();
  
  for(var i = 0; i < lastRow; i++){
    if(range[i] == chemNo){
      return 'B' + (i + 1);
    }
  }
}

这将获取参数,找到它所在的行,并返回单元格BX,其中X是化学编号所在的对应行,最后重定向到包含所需单元格范围的工作表。

段干庆
2023-03-14

谢谢你的建议。我最终确实制作了一个简单的1页webapp。JS实际上非常容易学。我使用了一种有点奇怪的方法从doGet()函数传递变量,方法是将变量存储在电子表格中,因为该函数只能返回html输出。

function doGet(e){
  var url = "https://docs.google.com/spreadsheets/d/13sLioJr_T6lRODrvGSqQ7y_pStBR8CKxReYwLUn4hao/edit#gid=0";
  var [ID, chemical, totalAmount, name, targetRow, unit] = fill(e);
  var ss = SpreadsheetApp.openByUrl(url).getSheetByName("Supplementary");
  ss.getRange("B5").setValue(ID);
  ss.getRange("B6").setValue(name);
  ss.getRange("B7").setValue(targetRow);
  ss.getRange("B8").setValue(Session.getActiveUser().getEmail());
  Logger.log(ID);
  var data = {ID:ID, chemical :chemical, totalAmount :totalAmount, unit :unit};
   var html = HtmlService
      .createTemplateFromFile('FrontEnd.html')
      .evaluate()
      .getContent();
   return HtmlService
     .createTemplate(html +    
       "<script>\n" + 
        "postChemicals( " +
        JSON.stringify(data) +
        ");\n</script>")
        .evaluate();
}
//  


function fill(e){
  // this function extracts event parameters and gets a cell from spreadsheet with query from URL
  // where name equals to spreadsheet name and ID to the chemical ID generated by "Code.gs"
  var url = "<post your url>";
    var ID = e.parameter.ID;
    var name = e.parameter.name;
  var targetRow =getCell(ID,name);
  var sheet = SpreadsheetApp.openByUrl(url).getSheetByName(name);
  var chemical = sheet.getRange("B"+targetRow).getValue()
  var totalAmount = sheet.getRange("D"+targetRow).getValue()- 
  sheet.getRange("C"+targetRow).getValue();
  var takenCell = sheet.getRange("C"+targetRow);
  var unit = sheet.getRange("E"+targetRow).getValue();
  Logger.log("fill(e) called");
  return [ID, chemical, totalAmount,name, targetRow, unit ]
}

function getCell(chemNo, name){
  var url = "https://docs.google.com/spreadsheets/d/13sLioJr_T6lRODrvGSqQ7y_pStBR8CKxReYwLUn4hao/edit#gid=0";
 // this is a function that searches for a cell
  //get the first sheet of your 
  var sheet = SpreadsheetApp.openByUrl(url).getSheetByName(name);
  var lastRow = sheet.getLastRow();
  var range = sheet.getRange('A1:A' + lastRow).getValues();

  for(var i = 0; i < lastRow; i++){
    if(range[i] == chemNo){
      return  (i + 1);
    }
  }
 类似资料:
  • 我试图在谷歌表单的特定列中找到一个空单元格。我熟悉getLastRow(),但它返回整个工作表中的最后一行。我想获取特定列中的第一个空单元格。所以,我使用了for循环和if循环。但我不知道为什么它不起作用。问题是for循环不返回任何内容。我得到了表单测试(第2行)中H列(位置8)的10行。前5行已包含内容。稍后将使用其他代码将数据添加到此单元格。因此,我希望能够在这个列中找到第一个空单元格,以便能

  • 我在PHP服务器中使用以下代码更新单元格中的值 运行此请求时,收到以下错误: 在PHP中,一次更新多个不连续单元格的GoogleSheetsAPI请求的正确方法是什么?

  • 我有一个谷歌电子表格。在某些单元格中,它有多个名称(字符串),我希望与单个超链接关联。 例如,如果我有一个单元格,比如“查尔斯·达尔文”,我很容易通过做类似于“代码”=“超链接”(VLOOKUP(“查尔斯·达尔文”,“人”!1美元澳元:$B738美元,2,假),“查尔斯·达尔文”)(请注意,我有一个“人物”表,我从其中抓取超链接) 但如果我碰巧在那个单元格中有多个条目,比如“或者新词分离,例如“查

  • 对编码完全陌生,我一直在自学。我对自己迄今为止所取得的成就感到非常高兴,现在我想拓展我的学习领域! 所以我组织青少年足球比赛。球队通过谷歌表格进入比赛。表格进入谷歌表格,然后我使用公式确保我可以看到每个年龄组有多少队参赛。每个年龄组在锦标赛中可以拥有最多数量的球队。指向活动窗体的链接是https://forms.gle/8VoBddM8AAJMFXqM7 我想做的事 目前,当一个年龄组接近满员时,

  • 谷歌电子表格中有一个项目列表,我们需要链接谷歌硬盘上另一个文件夹中的一组文件。链接的功能如下所示: 我们遇到的问题是,如果文件夹的内容与列表的顺序不完全匹配,则文件到行项目的顺序将不同步。如果同一行中另一个单元格的内容与文件名中的内容匹配,我们希望某些文件超链接到工作表中的某些单元格。我们希望避免为每个行项目手动创建链接。这在谷歌表单中是可能的吗?

  • 在Excel中,根据其他工作表中的列表筛选行非常容易。但是,GoogleSheets没有高级过滤选项。因此,不能像在Excel中那样按列表范围和条件范围过滤列。那么,如何根据Google Sheets中其他工作表的列表筛选行呢? 要筛选的工作表 带有筛选列表的工作表