如何连续10次重复'SAT',然后连续'SUN'连续重复?
我知道我可以使用复制/粘贴,点击/拖动,自定义功能(like this)以及内置功能的组合,例如TRANSPOSE(SPLIT(TRIM(REPT()。如果你不喜欢那些就很棒)必须经常使用它们。然而,不仅仅是'SAT'和'SUN'作为价值,这很快变得麻烦。
几天前我问a similar question。使用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。在我提供的第一个片段中,我能够将它们分开但是,我很想知道是否有更简单/更好的方式。
答案 0 :(得分:0)
=ARRAYFORMULA(TRIM(TRANSPOSE(SPLIT(QUERY(REPT(D1:D7&"",10),,9^99),""))))
D1:D7将包含SAT到FRI
答案 1 :(得分:0)
假设您只想将行附加到电子表格中,这将解决问题:
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列。
答案 2 :(得分:0)
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,我们有一个理想的解决方案。
答案 3 :(得分:0)
再次使用best practice...
中建议的使用数组和批量读/写的更有效的解决方案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);
}