在Sheets / App Script中将字符串拆分为单独的单元格的方法

时间:2018-05-02 15:28:28

标签: javascript google-apps-script google-sheets

我试图将字符串拆分为单独的单元格,但子字符串的顺序与它最初在字符串中的显示方式不同。并非字符串的所有部分都是必需的,并且每个子字符串的长度都不是静态的。我设法在一个单独的项目中实现了一些可行的工作,其中子串长度是静态的,使用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.

}

有人可以提出更好的方法吗?任何帮助将不胜感激。

3 个答案:

答案 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);