![](/img/trans.png)
[英]Split strings in multiple columns into multiple rows in Sheets - Google Apps Script
[英]Google Sheets Script - Repeating Multiple Strings X Times in Multiple Rows
我怎样才能连续有效地重复10次“ SAT”,然后再连续有效地重复“ SUN”次?
我知道我可以使用复制/粘贴,单击/拖动,自定义函数( 例如这样 )以及诸如TRANSPOSE(SPLIT(TRIM(REPT())等内置函数的组合。如果您不必经常使用它们,那将非常有用。但是,不仅将“ SAT”和“ SUN”作为值,这很快变得很麻烦。
几天前我问过类似的问题 。 在处理dev1998和Serge insas提供的解决方案时,我在下面创建了一个工作脚本。
function testAtA1() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = SpreadsheetApp.setActiveSheet(ss.getSheetByName('TEST')); // start columns and rows var currentRow = 1; var startColumn = 1; var numRows = 1; // Change to match number of items listed for a given variable var numColumns = 1; var day1 = [ ['SAT'] ] var day2 = [ ['SUN'] ] Logger.log(day1); Logger.log(day2); var day1Length = day1.length; var day2Length = day2.length; Logger.log(day1Length); Logger.log(day2Length); var currentRow2 = currentRow + 10 // ranges where values will be placed for (i = 0; i < 10; i++) { var target1 = sheet.getRange(currentRow, startColumn, numRows, numColumns).setValues(day1); currentRow = currentRow + 1; // Change to match number of items listed for a given variable } for (i = 0; i < 10; i++) { var target2 = sheet.getRange(currentRow2, startColumn, numRows, numColumns).setValues(day2); currentRow2 = currentRow2 + 1 } }
除了上面的内容,我还尝试了
var days = [['SAT'],['SUN']]
我能够将其替换为SAT,然后再进行SUN X次,但不能连续获取所有SAT,而是连续获取所有SUN。 通过提供的第一段代码,我可以将它们分开,但是我很想知道是否有更简单/更好的方法。
=ARRAYFORMULA(TRIM(TRANSPOSE(SPLIT(QUERY(REPT(D1:D7&"😋",10),,9^99),"😋"))))
D1:D7将通过FRI包含SAT
假设您只想将行追加到电子表格中,就可以做到这一点:
function addText(){
var ss = SpreadsheetApp.getActive().getActiveSheet();
var satRow = [];
for (var i = 0; i < 10; i++){
satRow.push("SAT");
}
var sunRow = [];
for (i = 0; i < 10; i++){
sunRow.push("SUN");
}
ss.appendRow(satRow);
ss.appendRow(sunRow)
}
appendRow()
将一维数组作为参数。 因此,只需构建一维数组并将其附加。
如果您需要在任意点插入行,那么最好使用自定义函数:
/**
* Fills a range specified in rows and columns with the specified value
*
* @param {number} Number of rows to fill
* @param {number} Number of columns to fill
* @param {string} input The value to iterate.
* @return An array containing the values
* @customfunction
*/
function fillRange(rows,cols,str){
var output = [[]];
for (var i = 0; i < cols; i++){
output[0].push(str);
}
for (var i = 1; i < rows; i++){
output.push(output[0]);
}
return output;
}
要使用它,请输入一个单元格=fillRange(1,2,"SAT")
以用“ SAT”填充一行中的2列。
function testAtA1() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.setActiveSheet(ss.getSheetByName('Sheet1'));
// start columns and rows
var currentRow = 1;
var startColumn = 1;
var numRows = 10; // Change to match number of items listed for a given variable
var numColumns = 1;
var days = ['SAT','SUN','MON']
for (d = 0;d < days.length ; d++) {
var data = days[d]
var target1 = sheet.getRange(currentRow, startColumn, numRows, numColumns).setValue(data);
currentRow = currentRow+10
}
}
通过添加另一个变量d并使d小于days.length的另一个循环,我们有了所需的解决方案。
再次按照最佳实践建议使用数组和批量读取/写入的更有效解决方案...
function testAtA1() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('TEST');
// start columns and rows
var currentRow = 1;
var startColumn = 1;
var numRows = 1; // Change to match number of items listed for a given variable
var numColumns = 1;
var day1 = 'SAT';
var day2 = 'SUN';
var data = sheet.getRange(1,1,sheet.getMaxRows(),sheet.getMaxColumns()).getValues();
var currentRow2 = currentRow + 10 ;// ranges where values will be placed
for (i = 0; i < 10; i++){
data[i][0] = day1;
data[i+10][0] = day2;
}
sheet.getRange(1,1,data.length,data[0].length).setValues(data);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.