【问题标题】:how to lock content of a dynamically generated cell with another cell如何将动态生成的单元格的内容与另一个单元格锁定
【发布时间】:2017-04-05 22:50:04
【问题描述】:

背景

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

Cardboardit 提供将数据转储到 csv 文件的功能,该文件可以在 data 选项卡中的 this 表中以原始形式呈现

数据选项卡非常原始,因此我使用此公式使其在estimate 选项卡中看起来更好:

=QUERY(data!A2:J,"select C,E,D where A='card' and E'white' order by I,J label C'name', E'color', D'笔记'",0)

然后我要求工程师在行中填写估算值。工程师在另外两栏(frontendbackend)下填写估算。

问题

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

但问题是工程师输入的值现在与新值不一致。即,一个名为“edit vibereel”的前端任务以前估计需要 1 天,但一旦输入新数据。一个放错地方了

问题

我怎样才能做到这一点 - 每当工程师在两列下输入值时,这些值就会锁定,或链接到它们原本打算在name 列下执行的任务。

备选问题

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

【问题讨论】:

  • Excel 和 Google 表格相似但又不相同。 IE。 QUERY 电子表格功能在 Excel 中不可用,但它有另一个工具可以完成类似的任务(实际上它做得更多),但它只适用于可安装的应用程序 AFAIK。

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


【解决方案1】:

简答

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

广泛的说明

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

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

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

    2.1 为了更轻松地保持数据同步,请包含 Cardboard 中的 id! CSV 文件(假设这是一个永久 ID)

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

    2.2 从后端表传递数据

    • 2.2.1 如果您继续使用公式,请“冻结”数据以防止手动输入的估计值仅因复制和粘贴值而未对齐。这可以通过使用 UI 命令、键盘快捷键或脚本来完成。

备注

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

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

稍后您可以使用 IMPORTRANGE 将所有修订估算放在一起,即制作估算随时间变化的图表。

基于公式的实现示例。

起点

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

步骤 1

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

第二步

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

第三步

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

=ArrayFormula(ARRAY_CONSTRAIN({{"frontend","backend"};IFERROR(VLOOKUP(B2:B,{'estimate-v1'!D:D,'estimate-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)
))

第四步

  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. 应用格式和公式来计算估计总数。

纸板吧! CSV 标头

  • 种类
  • 身份证
  • 姓名
  • 说明
  • 颜色
  • 状态
  • 尺寸
  • 注释
  • x
  • image_url

另见

参考文献

【讨论】:

  • 对于这部分=QUERY('data-v2'!A2:M,"select C,E,D,B,L,M where A='card' and E&lt;&gt;'white' order by I,J label C 'name', E 'color', D 'notes', B 'id', L 'front end', M 'backend' ",0) 假设我想简单地在estimate-v2 上提供估计的默认值,但也允许工程师修改他们的旧估计。 . 我可以简单地手动复制来自front endback end 列的值,对吗? (即仅粘贴值)
  • 或者您可以使用右侧的列进行新的估算。
【解决方案2】:

可能的解决方案

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

  1. 再制作一个“帮助”选项卡来存储数据。
  2. 按 ID 连接当前选项卡和“帮助”选项卡。您的示例中的 ID 是 A 列:名称。使用ArrayFormula + vlookup 使其动态更新。
  3. 制作脚本onEdit:在当前选项卡中编辑目标列时→读取值→清除单元格→将值粘贴到“帮助”选项卡中。公式会恢复正确的值。

我已经在我的项目中实现了这一点。缺点是您必须等待大约 0.5 秒。编辑单元格时脚本正在运行。

我做了sample sheet,你可以测试一下。

【讨论】:

  • 你的想法似乎很有趣.. 但我需要一些工作示例来演示它的工作,因为它留下了很多想象力。如果您更喜欢使用较小的数据集,可以将其应用于我的工作表或您自己的示例工作表
  • 我已经制作了样品,请尝试。
  • 你的答案在这个公式中不起作用 b/c:{"Id";ArrayFormula(ROW(INDIRECT("A1:A"&amp;max(data!B:B))))} 你得到的最大值是 data!B:B.. 这是 984060(用户地图生成的 ID 值很大)..所以当我输入公式时,我得到了这个错误:Result was not expanded automatically, please insert more rows (934061)... 见实验in this sheet
  • 我在您提供的示例电子表格上进行了测试。当我添加不按顺序且不是从 1 开始的 ID 时,它崩溃了,请参阅 here
  • 您的电子表格中真的有 984060 行吗? ID是指条目的数量。如果不是,则脚本还必须从帮助表中读取所有 ID,这会减慢脚本速度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多