【问题标题】:Combining Data From Many Cells into One将来自多个单元的数据合并为一个
【发布时间】:2014-01-08 21:04:42
【问题描述】:

我在谷歌电子表格中整理了一个相当长的电子表格。此电子表格包含有关产品的信息,例如名称、品牌、部件号等...我之前得到了帮助并提供了一些不错的解决方案,但我仍然遇到了限制。

我要做的是根据其他单元格中的信息自动生成描述字段。

我在描述栏中使用的公式是="Brand Name"&" "&A3&" "&B3&" "&(joinVals(E3:G3," x "))&" "&K3

joinVals(E3:G3," x ") 将包含 Length(E) Width(F) Height(G) 的单独列连接在一起,并在值之间添加“x”。这导致 E x F x G

此脚本适用于上述公式

function joinVals( rangeValues, separator ) {
function notBlank(element) {return element != '';}

return rangeValues[0].filter(notBlank).join(separator);
}

但是我一直收到这个错误

为此 Google 用户帐户每秒调用的脚本次数过多。

我想知道是否可以将其作为一个数组来避免错误,因为此文档包含 1000 多个 ROWS。

说完我想要达到的结果应该是这样的 “品牌名称” 零件编号(A) 产品名称(B) 尺寸(E x F x G) 尺寸(K)

我应该运行 ARRAY 脚本吗?

非常感谢大家,这个论坛帮了大忙!

【问题讨论】:

    标签: javascript google-apps-script google-sheets array-formulas google-sheets-custom-function


    【解决方案1】:

    可以使用数组解决方案,但您必须对在电子表格中使用公式的方式进行大量更改。最简单的解决方案是直接使用内置的电子表格公式。无需为此使用自定义 Apps 脚本公式。

    ="Brand Name"&" "&A3&" "&B3&" "&(join(" x ";filter(E3:G3;E3:G3<>"")))&" "&K3
    

    如 cmets 中的AdamL 所示,这是一个仅使用内置公式的ArrayFormula 解决方案。

    =ArrayFormula(IF(LEN(A3:A),REGEXREPLACE("Brand Name "&A3:A&" "&B3:B&" "&REPT(E3:E&" x ",E3:E<>"")&REPT(F3:F&" x ",F3:F<>"")&REPT(G3:G&" x ",G3:G<>"")&CHAR(9)&" "&K3:K,"( x \t)|\t",""),))
    

    正如我所说,在编写自定义 Apps 脚本时也可以使用这种 ArrayFormula 风格的解决方案。当有(可以说)更简单的内置解决方案(但肯定更快,更大的配额)时,我只是不认为这是值得的。

    【讨论】:

    • 数组公式解决方案,从第 3 行开始,只有在对应行的 A 列中有内容时才会向下填充该列:=ArrayFormula(IF(LEN(A3:A),REGEXREPLACE("Brand Name "&amp;A3:A&amp;" "&amp;B3:B&amp;" "&amp;REPT(E3:E&amp;" x ",E3:E&lt;&gt;"")&amp;REPT(F3:F&amp;" x ",F3:F&lt;&gt;"")&amp;REPT(G3:G&amp;" x ",G3:G&lt;&gt;"")&amp;CHAR(9)&amp;" "&amp;K3:K,"( x \t)|\t",""),))
    • 谢谢亚当。当我第一次看到你的公式时,我总是会笑一点。然后有几分钟的凝视,直到我理解它。非常好的解决方案!我认为我的新手版本虽然更具说教性:)
    • AdamL 完美运行。我也认为这也有效="Brand Name"&amp;" "&amp;A3&amp;" "&amp;B3&amp;" "&amp;IF(E3="","",E3&amp;"''"&amp;IF(AND(F3="",G3=""),""," x "))&amp;IF(F3="","",F3&amp;"''"&amp;IF(G3="",""," x "))&amp;IF(G3="","",G3&amp;"''") 你能解释一下&amp;CHAR(9)&amp;" "&amp;K3:K,"( x \t)|\t",""),)) 在做什么吗?
    • Henrique,Yours 确实有效,但取决于行中是否有尺寸。一些严肃的快速和真棒回复家伙!感到幸福。我是个新手,就像亚当写的那个公式一样(我的大脑僵住了)!哈哈
    • user2970972,该公式在 E:G 列中存在的每个值之后附加一个分隔符,然后在其后附加一个制表符 (CHAR(9))。然后 REGEXREPLACE 搜索紧跟制表符的分隔符(或者如果该行的 E:G 中没有值,则只有一个制表符本身)并将其删除。我希望这是有道理的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2020-07-26
    相关资源
    最近更新 更多