Google Apps脚本 - 回读电子表格数据,循环和写入数据

时间:2017-04-05 19:26:58

标签: google-apps-script

我正在寻找一些帮助,按行循环遍历电子表格中的一组数据,然后将第一个单元格中的值写入新工作表,然后将每个单元格值写入行。

以下是一组示例数据的链接。 Sample Data

上面的电子表格中的Sheet1显示了原始数据。我想读取该数据并将其写入第二张(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]);
 }
 };
 }

2 个答案:

答案 0 :(得分:2)

这是我尝试做的工作版本。

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]);
   }
 }
 }
 }

答案 1 :(得分:0)

此代码将在第一个可用行

中写入数据
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]);
 };
 }

希望有所帮助