使用原生功能计算Google表格的分层标签 [英] Calculate hierarchical labels for Google Sheets using native functions
本文介绍了使用原生功能计算Google表格的分层标签的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
使用Google表格,我想自动为行编号,如下所示:
关键是我希望它仅使用内置函数。
>我有一个实现工作,其中的子项在不同的列中(例如Foo在B列中,Bar在C列中,Baz在D列中)。但是,它使用自定义JavaScript函数,并且评估自定义JavaScript函数的慢速方式以及依赖项(可能与慢速Internet连接相结合)意味着我的解决方案每行可能需要超过一秒(!)才能计算。
作为参考,这里是我的自定义函数(我想放弃支持本地代码):
/ **
*计算此行的工作分解结构ID。
*
* @param {range} priorIds在此之前的ID。
* @param {range}名称此行的名称。
* @return WBS字符串标识(如2.1.5)或空字符串(如果没有名称)。
* @customfunction
* /
函数WBS_ID(priorIds,names){
if(Array.isArray(names [0]))names = names [0];
if(!names.join())return;
var lastId,pieces = [];
for(var i = priorIds.length; i--&!lastId;)lastId = priorIds [i] [0]; (lastId)pieces =(lastId +)。split('。')。map(function(s){return s * 1});
if(lastId)pieces =
for(var i = 0; i< names.length; i ++){
if(names [i]){
var s = pieces.concat();
pieces.length = i + 1;
pieces [i] =(pieces [i] || 0)+ 1;
return pieces.join(。);
code $
例如,单元格A7会使用公式:
= WBS_ID(A $ 2:A6,B7:D7)
...以产生结果1.3.2
请注意,在上面的例子中,空白行在编号时被跳过。可以接受(甚至可取的)一个答案,即不承认这种情况 - 其中ID是通过 ROW()
)确定性地计算的。
编辑:是的,我试图自己做这个。我有一个解决方案,使用了三个额外的列,我选择不包括在问题中。我一直在Excel中编写方程至少25年(Google Spreadsheets为期1年)。我已经浏览了谷歌电子表格的功能列表,并且他们中没有一个能够跳出来,因为我可以做出以前没有想到的东西。
当问题是一个编程问题,问题是无法看到如何从A点到B点,我不知道展示我所做的事情是有用的。我考虑过按时段分裂。我查找了一个 map
等价函数。我知道如何使用 isblank()
和 counta()
。
解决方案大声笑这是最长的(也许是最不必要的复杂方式来结合公式),但是因为我认为它确实有效是有趣的,只要您只需在第一行中添加1,然后在第二行添加:
= if(row()= 1, 1,如果(和(ISTEXT(D2),COUNTA(分裂(A1))= 3),左(α-1,4)及 ; N(右(A1,1)+1),如果(和( ISBLANK(B2),ISBLANK(C2),ISBLANK(D2)) ,如果(和(ISBLANK(B2),ISBLANK(C2),ISNUMBER(间接的(地址(行() - 1,列())) )),间接的(地址(行() - 1,列()))&安培;&安培;如果(ISTEXT(D2),圆形(最大(间接(地址(1,列())及 。: &安培;地址(行() - 1,列())))+ 0.1,)),如果(和(ISBLANK(B2),ISTEXT(C2)),轮(MAX(间接的(地址(1,列( ))及 : &安培;地址(行() - 1,列())))+ 0.1,2),如果(ISTEXT(B2),圆形(最大(间接(地址(1,列()) &:& address(row() - 1,column())))+ 1,),))))))
查看全文