我试图将字符串拆分为单独的单元格,但子字符串的顺序与它最初在字符串中的显示方式不同。并非字符串的所有部分都是必需的,并且每个子字符串的长度都不是静态的。我设法在一个单独的项目中实现了一些可行的工作,其中子串长度是静态的,使用lastIndexOf,但它非常笨重。
我希望有人能指出我更好的方法来解决问题。
每个数据字符串都如下所示:
01|020202|03|0404040404|05|0606060606|
我之前的代码与此相同:
function splitString() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Data");
var input = sheet.getRange(2,4).getValue();
var data1 = input.substring(input.lastIndexOf("!")-5,input.lastIndexOf("|")-1);
var data2 = input.substring(input.lastIndexOf("|")-10, data1);
// etc.
sheet.getRange(3,2).setValue(data1);
sheet.getRange(4,2).setValue(data2);
// etc.
}
有人可以提出更好的方法吗?任何帮助将不胜感激。
答案 0 :(得分:1)
Look thru the various string API methods for Javascript on MDN。应该有一个使用分隔符(在您的情况下为管道“|”字符)将字符串拆分为数组。然后检查Range类的setValues
方法,该方法允许您使用带有单个方法调用的数组设置一系列单元格。
答案 1 :(得分:1)
function splitString() {
var theSplitString
="01|020202|03|0404040404|05|0606060606|".split("|");
Logger.log(theSplitString);
// the result is an array [01, 020202, 03, 0404040404, 05, 0606060606, ]
}`
然后按照建议使用range.setValues
答案 2 :(得分:1)
看起来您需要将每个元素放在不同行上的同一列上。使用String.prototype.split()然后将生成的数组转换为2D数组。
以下示例,为简单起见,构建于" pure" JavaScript,使用forEach但还有其他几种方法可以做同样的事情。
var s = '01|020202|03|0404040404|05|0606060606|';
var t = s.split('|');
var output = [];
t.forEach(function(q){
output.push([q]);
});
console.info(output);