如何使用另一个单元

时间:2016-11-22 10:02:42

标签: google-apps-script google-sheets array-formulas

背景

我喜欢使用story mapping使用cardboardit.com从客户收集需求(并为他们创建估算值)。我目前正在为我过去完成的项目(http://vibereel.com/)进行样本估算。

Cardboardit提供了将数据转储到csv文件的功能,该文件可以原始形式显示在this表格中的data标签中

数据标签非常原始,因此我使用此公式使其在estimate标签中看起来更漂亮:

  

= QUERY(数据!A2:J,"选择C,E,D,其中A ='卡'和E<>'白色'由I命令, J标签C'名称',E'颜色',D'注释'",0)

然后我要求工程师填写行中的估算值。工程师在其他两列(前端后端)下填写估算值。

问题

问题在于我意识到我错过了用户地图中的一些元素。所以我调整用户地图,再次导出数据并将其转储到data表格中。考虑到上述公式是智能的,estimate表格会立即准确更新。

然而问题是,工程师输入的值现在与新值不对齐。即前端任务称为"编辑vibereel"以前有一天的估计,但一旦新的数据进入..那一个错位

问题

我怎么能这样做呢 - 只要工程师在两列下输入值,这些值就会锁定,或链接到name列下最初用于的任务。

enter image description here

替代问题

解决这个问题的另一种方法是每次更改数据表时(由于用户地图的更改)..新数据集可以转储到新的数据表(即data-v2)和可以创建另一个估算表(即估算值-v2)。这将具有商业意义,因为它向客户显示估算值的变化。在这种情况下,如何简单地将估算值从estimate复制并粘贴到estimate-v2并仍然将它们链接到相应的估算值?

2 个答案:

答案 0 :(得分:3)

简短回答

无法直接将输入的值锁定到公式结果行。而是使用后端/前端架构类型。

广泛的指示

  1. 后端表。创建一张用作纸板的“镜子”的纸张吧!工程师在电子表格中输入的数据和估算值(一个后端,两个前端)

    1.1备选方案1:使用脚本更新两个来源的数据值 1.2备选方案2:使用公式连接两个来源的数据值。

  2. 前端工作区。使用此表格进行时间估算的手动数据输入。

    2.1为了更容易保持数据同步,请包含来自Cardboard的ID! CSV文件(假设这是一个持久性ID)

    • 2.1.1您可以隐藏此列以保持当前布局的外观。

    2.2从后端表传递数据

    • 2.2.1如果继续使用公式,请“冻结”数据以防止手动输入估算值的数据仅通过复制和粘贴值进行错位。这可以通过使用UI命令,键盘快捷键或脚本来完成。
  3. 说明

    如果您将在会议上使用电子表格,我认为时间驱动的触发器或自定义菜单比编辑触发器更好,因为运行脚本需要时间以避免在会议期间分心。< / p>

    如果您想保留修订版,请在每次导入CSV文件或进行估算审核会议时制作电子表格的副本。将副本保留为修订快照,并继续处理原始文件。这是因为Google表格修订历史可能包含太多细节,无法轻松跳转到主要版本,但如果您需要进行详细的历史修订,则可能会有所帮助。

    稍后您可以使用IMPORTRANGE汇总所有修订估算值,即使估算值图表随时间变化。

    基于公式的实现示例。

    起点

    假设您有两个电子表格 - data:它保存从第一次导出到CSV文件的数据。 - 估计:它保持屏幕截图所示的布局。

    第1步

    将id值添加到估算表中。假设它是作为D列插入的。

    第2步

    在Cardboard it!上对纸板进行更改后,下载并导入新的CSV文件,假设这个新工作表名为data-v2。为简单起见,在此示例中,它已添加到同一电子表格中。

    第3步

    将以下公式添加到data-v2!L1

      

    = ARRAYFORMULA(ARRAY_CONSTRAIN({{ “前端”, “后端”}; IFERROR(VLOOKUP(B2:B,{ '估计-V1' d:d, '估计-V1' E:F},{! 2,3},FALSE()),)},COUNTA(A:A),2000000))

    评论公式

    =ArrayFormula( // Tells Google Sheets that non array functions should work as array 
    functions and that the result should be expanded to the required area (rows/columns)
    ARRAY_CONSTRAIN( // Limit results to the required number of rows.
    { // Starts a new array
    {"frontend","backend"}; // Array with the column headers
    IFERROR( // In case of error will return a blank
    VLOOKUP(
    B2:B, // Range with the values look for.
    {'estimate-v1'!D:D,'estimate-v1'!E:F}, // Array. This is my preferred notation considering 
    that that the ID column could be moved in the future, but at this time it could be replaced
     by 'estimate-v1'!D:F
    {2,3}, // This makes that VLOOKUP returns a array with two columns. The first column is 
    filled up with values from the second column, the column is filled up with values from the 
    third column.
    FALSE() // This tells VLOOKUP that the second argument is not sorted.
    ),)
    },
    counta(A:A), // This limits the resulting rows to those that are required (discards blank 
    rows)
    2000000 // A big number (it's the maximun number of cells)
    ))
    

    第4步

    1. 为新的估算值审核创建新工作表。
    2. 将以下公式添加到A1

      =QUERY('data-v2'!A2:M,"select C,E,D,B,L,M where A='card' and E<>'white' order by I,J 
      label C 'name', E 'color', D 'notes', B 'id', L 'front end', M 'backend' ",0)
      
    3. 全选,复制并粘贴为值。

    4. 应用格式和公式来计算估算总数。
    5. 纸板吧! CSV标头

      • ID
      • 名称
      • 描述
      • 颜色
      • 状态
      • 尺寸
      • 注释
      • X
      • ý
      • IMAGE_URL

      另见

      参考

答案 1 :(得分:1)

可能的解决方案

它太大了,无法在单一答案中发布,但计划是:

  1. 再多做一次帮助&#39;用于存储数据的标签。
  2. 连接当前标签页&#39; help&#39;按ID分类。示例中的ID是A列:名称。使用ArrayFormula + vlookup动态更新。
  3. 制作脚本onEdit:在当前标签中编辑目标列时→读取值→清除单元格→将值粘贴到“帮助”中。标签。而公式将带来正确的价值。
  4. 我已经在我的项目中实现了这一点。缺点是你必须等待大约0.5秒。编辑单元格时脚本正在运行。

    我已制作sample sheet,您可以对其进行测试。