【问题标题】:Google Sheets: Replace cell contents with another cell contents when "Clicked"?Google表格:“单击”时将单元格内容替换为另一个单元格内容?
【发布时间】:2017-02-02 18:56:34
【问题描述】:

Google 表格:“点击”时将单元格内容替换为另一个单元格内容?

我正在尝试创建一种简单的方法,以便在单击任何单元格所在的行中的任何单元格时从该行中显示更多数据。目前,我有一个不错的 =VLOOKUP("*") ... 函数,它允许我输入 @987654325 @name 进入“搜索栏”单元格,然后 VLOOKUP 将根据 COMPANY 显示单元格内容。

您可以在这里看到它的实际效果: Google Sheets Demo

如何使用:

绿色单元格:在“搜索栏”单元格中输入公司名称...
橙色单元格:如果找到“公司”,则会显示左侧的公司单元格内容。


我想做什么:

  1. 单击任意行中的单元格
  2. 让该单元格知道它所在的行并导航到COMPANY 列。
  3. COMPANY 列复制单元格内容并替换“搜索栏”单元格的当前内容
  4. VLOOKUP 将随后处理其余部分。

可能吗?

单独使用 Google 表格功能是否可行?或者这是应该用脚本处理的东西?我该怎么办?

【问题讨论】:

    标签: javascript google-apps-script google-sheets spreadsheet google-spreadsheet-api


    【解决方案1】:

    目前无法创建 onClick 函数。我们拥有的最接近的东西是 onEdit() 函数。我可以想出两种方法来完成这种工作。

    1) 只有当您不介意锁定脚本时,此 onEdit 版本才有效。您可以编写一个 IF 语句来创建一种方法来阻止它在您编辑时暂时运行。
    2)您可以设置第二个工作表并从那里导入或备份值,然后始终在第一个上运行它。

    function onEdit(e) {
    //This sets up the worksheet variables
     var worksheet = SpreadsheetApp.getActive();
     var sheet = worksheet.getActiveSheet();
    //This saves the original value e
     var origValue = e.oldValue
    //This figures out where you clicked, and gets the K+rowyouclicked value.
     var selection = sheet.getActiveCell().getA1Notation();
     var splitselection = selection.match(/([A-Za-z]+)([0-9]+)/);
     var CompName = sheet.getRange("K" + splitselection[2]).getValue();
    //set the value on the search bar and return the original value to where you changed.
     sheet.getRange("C3").setValue(CompName);
     sheet.getActiveCell().setValue(origValue)
    }
    

    【讨论】:

    • 太棒了!我试试看
    • 如果可行,请标记已回答的问题以帮助未来的搜索者@Oneezy
    • 我正在尝试使选项 2) 发挥您所提供的作用。我已经设置了另一个名为“_data”的工作表,我将其导入到带有函数和脚本“CLIENTS”的主工作表中。我在脚本中收到此错误消息:TypeError:无法从未定义中读取属性“oldValue”。 (第 8 行,文件“代码”)docs.google.com/spreadsheets/d/…
    • 这里是脚本的截图和错误信息:oneezy.com/stackoverflow/script-replace-contents.png
    • @Oneezy 您是否单击“运行”按钮?还是您只是保存它并更改值?你应该做后者。更改活动单元格后让它运行。如果这就是您正在做的事情并且它给您该错误消息,那是因为我的脚本没有任何错误检查原始值是否为空白。所以要么把它写进去,要么只改变一个已经有值的单元格。