将工作表数据转换为新工作表

时间:2015-11-24 21:45:36

标签: google-apps-script google-sheets

我尝试使用Google Apps脚本与Google表格进行通信,以执行以下操作: 我们正在尝试将数据从一个销售点系统转换为新系统。为了做到这一点,我需要获取工作表的某些列,以各种方式操作它们,并使用结果数据重新填充另一个工作表。我需要找到没有SKU编号的产品,并为它们分配一个新的产品,从10110开始并从那里开始递增。



function sku() {
  // "From" Spreadsheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("New POS Data");
  
  // "To" Spreadsheet
  // Spreadsheet key: the string at the end of the URL
  var ssraw = SpreadsheetApp.openById("1BH-j4cOW9Ntg6FlPNXmNCUId_pm9BgyAh0cwrwB4z_A");
  var sheetraw = ssraw.getSheetByName("Old POS Data");
  var max = sheet.getLastRow();
  // SKU / UPC
  var range = sheetraw.getRange(2,18,max);
  var data = range.getValues();
  
  // Assign new sku if no old one
  var skunum=[10110];
  var newData = new Array();
  for (var y = 0; y <= max; y++) {
    if (data[y]==""){
      newData.push(skunum);
      skunum++;
      var skunum=[skunum];
    }
    else {newData.push(data[y]);}
  }
  
  sheet.getRange(2,3,max).setValues(newData);
}
&#13;
&#13;
&#13;

这给了我错误&#34;不正确的范围高度,为1但应该是30(第26行,文件&#34; SKU&#34;)&#34;

如果我删除最后一行中newData周围的括号,我得到&#34;无法将数组转换为Object [] []。 (第27行,文件&#34;&#34;)&#34;

这让我很精神,如果有人能提供帮助,我将非常感激。

1 个答案:

答案 0 :(得分:0)

即使您使用getData()获得一行或一列矢量,也会获得Object[][]
当你这样做时:

if (data[y]==""){
  newData.push(skunum);
  skunum++;
  var skunum=[skunum];
}

您检查[cellFromColumn] == ""是否评估为false,因为它是一个数组 然后将新/旧sku编号推送到一个简单的数组,对于电子表格,该数组是一行列 相反,你想要将一个元素数组包含在sku数中,如下所示:

newData.push(skunum);
...
newData.push([data[y]]);

这将创建一个行数组,每行是一个包含一个元素(一列)的数组