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

使用onEdit与Google工作表共享电子表格,从一个工作表收集信息,并在另一个工作表中设置值,同时限制其他用户

轩辕远
2023-03-14

我在脚本中有一个暂停/暂停,我已经工作了几个星期了。我是个新手,所以需要很多研究和帮助。现在脚本可以正常工作了,但是我想使用GoogleSheets专门与其他帐户共享这些表单。其想法是,一台计算机作为主机,只需将数据收集表整理好即可。另一台计算机将具有客户端,我们称之为客户端,通过C列中的下拉菜单单击位置或在C列中键入位置。只有在活动工作表上编辑C列时,OneEdit功能才会激活。(客户机使用的工作表)更改任何内容后,onEdit使用如果列C等于某些内容,则启动另一个函数,将信息插入被动工作表。(工作表收集数据)我面临的问题是,我不希望客户端计算机能够编辑被动工作表中的任何内容。我这样做的一种方法是使用Google Sheets来保护被动工作表不受其他用户的影响,但当我这样做时,每次他们编辑C列时,该功能都无法发挥作用。可能是因为脚本无法插入到受保护的工作表中?我想,通过在客户端计算机上编辑C列,它也会在主机上编辑C列,并且onEdit功能会在主机上激活。但显然,onEdit函数只有在手动编辑的情况下才会激活,通过脚本设置值并不能将其剪切。我错了吗?

我做的另一件事是隐藏被动工作表,但保持其可编辑性,这是可行的,但他们仍然可以单击“查看”并再次显示它。有没有办法防止这种情况?

我试图使这个脚本从客户端计算机牢不可破。

这里有几行代码来告诉你我的意思。

function onEdit(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
   var row = getCurrentRow()
   var Location = getValue('ACTIVE!C' + row)
   var firstName = getValue('ACTIVE!A' + row)
   var lastName = getValue('ACTIVE!B' + row)
  var passiveRow = findRows(1,firstName,2,lastName,5,"",'PASSIVE');

  if(SpreadsheetApp.getActiveSheet().getName() !== "ACTIVE") return;

  if(Location !== 'OFFICE' && Location !== ""  && passiveRow !== "") {
    timeIn();
    places();

    Logger.log(passiveRow)
}

    else if(Location !== 'OFFICE' && Location !== ""  && passiveRow == "") {
    places();

    Logger.log(passiveRow)
}

     else if(Location === 'OFFICE') {
    timeIn();
}

}

“findRows”函数是在被动脚本中查找符合条件的行的函数,并为我提供该行以放置TimeIn函数。

最后,我不在乎用什么方法,也许有一个更好的html" target="_blank">方法我没有想到。一种防止客户端编辑被动工作表的方法,但他们仍然可以编辑活动工作表,代码将正常运行。

共有1个答案

洪伟兆
2023-03-14

我们在我的工作场所运行了一个类似的登录/注销系统。我们是这样做的:

创建不同的主机电子表格。(客户端gmail帐户不需要对主机电子表格进行编辑访问。)

    function onEdited() {
      SpreadsheetApp.openById("host spreadsheet id").appendRow(["this function 
      ran"]);
    }
  • 与客户共享客户表。当他们进行更改时,您的函数将运行并更新主机电子表格

注意:如果您的on-edited函数需要客户端的任何用户权限才能运行(例如获取会话信息),它将不会启动,因此请使用一条简单的“I-ran”消息进行测试,并逐步达到您需要的位置。

 类似资料:
  • 我有一个用于Google Sheets的“onEdit”脚本,但只希望它在一张工作表上工作: 如何更改脚本,使其仅在工作表中的一张工作表上工作?

  • 试图从当前工作簿“Create Report.xlsm”中复制工作表名称“Headings Explantions”,该工作簿打开到我要求打开的工作簿中,我得到了下标超出范围的错误

  • 我写了一个google脚本来创建和粘贴从一个单元格到另一个单元格的值(相同的电子表格)。该守则包括以下两个步骤: > (不工作):将相邻单元格的新值粘贴到第二张工作表中下一个空行(第1列)的单元格中。 下面的代码是我迄今为止尝试过的代码,但第二页上没有显示该值。有人知道我在下面的尝试中的问题在哪里吗? 谢谢你

  • setCurrentSheetIsFirst(): self 实例 $config = ['path' => './tests']; $excel = new \Vtiful\Kernel\Excel($config); ​ $excel->fileName('hide.xlsx', 'sheet1') // 初始化文件,同时初始化第一张工作表 sheet1 ->header(['sh

  • 我有一个谷歌电子表格,其中有3张表格,包含来自不同国家的数据(,,),还有第4张表格()。所有图纸中的列都相同。 我已经知道我可以这样组合它们: 然而,我需要一种方法将任意数量的纸张组合在一起,而不需要修改公式。所以,如果添加了Country4,也应该追加。我怎么能那样做? 如果有帮助,我有一个工作表,其中有一列包含所有国家的名称(因此也包括国家工作表名称)。我有一个脚本,如果在工作表中添加了一个

  • 我知道如何复制工作表,但这将导致多个工作表。我需要的是一个输出工作表,一个接一个地包含所有的工作表。 目前我正在做的是将每个工作表导出为< code>DataTable,然后逐个导入: 但这样,我就失去了单元格样式和文本格式 有没有办法用保留样式?