我正在扩展和澄清我先前问过的问题Here:
如何返回单元格中单词每两次出现之间的字符数?
并且在一个1格单元格区域中的2个或多个单元格中?
例如:
请参阅Sheet6 here
单元格A2包含单词“ apple”的4倍,每次用x个字符分隔。
如何返回Sheet6 B,C,D和E列中所示的中间编号?
如何使用脚本执行此操作?理想情况下,对于A2:A的范围来设置范围B2:B,C2:C,D2:D,E2:E和F2:F中每个相应单元格的相对字符数?
在A2中:
0 apple one apple 2 apple three apple four.
返回的所需结果将设置为:
在B2中:2 (用于2个字符串“ 0(-)”的字符)
在C2中:5 (对于字符串“(-)one(-)”的5个字符)
在D2中:3 (对于字符串“(-)2(-)”的3个字符)
在E2中:7 (对于字符串“(-)three((-)”)的7个字符)
在F2中:6 (对于字符串“(-)four。”的6个字符, 与“。”作为最后一个字符出现 该单元格作为关闭计数的准则。)
考虑跨两个单元格A3和A4的字符串:
A3 = zero apple one apple 2
A4 = apple three apple four.
在B3中:5 (用于字符串“ zero(-)”的5个字符)
在C3中:5 (用于字符串“(-)one(-)”的5个字符)
在D4中:3 (对于3个字符串“(-)2(-)”的字符。 在D4中,因为下一个“苹果”在下面一行, 计数也设置为相对下一行)。
在E4中:7 (对于字符串“(-)three((-)”)的7个字符)
在F4中:6 (对于字符串“(-)four。”的6个字符, 与“。”作为最后一个字符出现 该单元格作为关闭计数的条件。)
到目前为止,我已经将@Jescanellas的上一个脚本改编为下面的here
function numcharsbetweenocc1and2ofApple() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
var your_string = sheet.getRange("B2").getValues().toString();
var appletree = [];
var apple_length = "apple".length;
var char_counter = 0;
while ("B2" !== "") {
var apple = your_string.indexOf("apple", char_counter) + apple_length;
appletree.push(apple);
char_counter = char_counter + apple;
var result = apple;
sheet.getRange("D2").setValue(result);
if (char_counter >= your_string.length)
break;
};
};
但是,它返回直到上次出现“ apple”的字符数。并且仅对于一个当前单元格,当我将.getRange("B2")
更改为.getRange("B2:B")
并将sheet.getRange("D2:D").setValue(result);
更改为sheet.getRange("D2:D").setValue(result);
时,它不适用于整个列。
Sheet4
再次出现预期结果:
Sheet6 here
感谢您的输入和帮助!