Google Apps脚本 - 读取电子表格数据,循环和写回数据
问题描述:
我正在寻找一些行的循环中的电子表格中的一组数据,然后将值写入到一个新的工作表通过行中的每个单元格值。Google Apps脚本 - 读取电子表格数据,循环和写回数据
这里是一个样本数据集的链接。 Sample Data
上述电子表格中的Sheet1显示原始数据。我想读取这些数据并将其写入表2(2),使其看起来像上面链接的表2中的内容。
这是我现在使用的代码,但它将所有数据写入单个列。
function myfunction() {
var sheet = SpreadsheetApp.getActiveSheet();
var sheet2 =
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet2');
var data = sheet.getDataRange().getValues();
for (var i = 0; i < data.length; i++) {
for (var j = 0; j < data[i].length; j++) {
var iava_value = (data[i][0]);
var lastRow = sheet2.getLastRow();
sheet2.getRange(lastRow +1, +1).setValue(data[i][j]);
}
};
}
答
此代码将在第一个可用行写在数据
function myfunction() {
var sheet = SpreadsheetApp.getActiveSheet();
var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet2');
var lastRow = sheet2.getLastRow();
var colCounter = 1
var data = sheet.getDataRange().getValues();
for (var i = 0; i < data.length; i++) {
for (var j = 0; j < data[i].length; j++) {
var iava_value = (data[i][0]);
sheet2.getRange(lastRow +1, colCounter).setValue(data[i][j]);
colCounter++;
}
};
}
但是,请注意上面的代码是不处理/写数据的最有效方式。大量的开销=将时间单独写入表单。
这是一个更好的方法
function myfunction() {
var sheet = SpreadsheetApp.getActiveSheet();
var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet2');
var lastRow = sheet2.getLastRow();
var data = sheet.getDataRange().getValues();
var reArrangeData = []
for (var i = 0; i < data.length; i++) {
reArrangeData = reArrangeData.concat(data[i])
// concat the arrays end over end to get 1D array
}
sheet2.getRange(lastRow +1, 1, 1, reArrangeData.length).setValues([reArrangeData]);
};
}
希望帮助
+0
谢谢,但它把整个单行。我正在寻找最终的结果是两列。第一列包含每行中的第一个单元格,第二列包含每行中最左侧单元格右侧的每个单元格的值。 – jjones312
答
这里是什么,我试图做一个工作版本。
function transpose() {
var sheet =
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var sheet2 =
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet2');
var data = sheet.getDataRange().getValues();
var myRA = new Array(2);
for (var i = 0; i < data.length; i++) {
//GET IAVA No
var iava_no = data[i][0];
for (var j = 1; j < data[i].length; j++) {
var plugin_id = (data[i][j]);
if(plugin_id === "" || plugin_id =="n" || plugin_id == "a"){
break;
}
else
{
Logger.log(plugin_id);
var lastrow = sheet2.getLastRow();
sheet2.getRange(lastrow + 1, 1).setValue(data[i][0]);
sheet2.getRange(lastrow + 1, 2).setValue(data[i][j]);
}
}
}
}
尝试(var i = 0; i
Juniar
在循环内用[j]替换[0]。成为var iava_value =(data [i] [j]);然后将sheet2设置为:sheet2.getRange(lastRow + 1,+ 1).setValue(data [i] [0]); – Juniar
谢谢你的建议..没有得到我想要的。 – jjones312