首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将数组写入电子表格。setValues抛出“无法将数组转换为对象”

如何将数组写入电子表格。setValues抛出“无法将数组转换为对象”
EN

Stack Overflow用户
提问于 2019-06-17 17:21:17
回答 3查看 115关注 0票数 1

我试图将我的数组写入电子表格,但我做了一些错误的事情。我读过许多帖子,上面写着要做我正在做的事情,但这是行不通的。请参阅下面最后一行代码

在最后一行代码中

‘’consol_sheet.getRange(2,1,x,10).setValues(Final_values);‘’我得到一个错误

“无法将数组转换为对象”

代码语言:javascript
复制
function iterateSheets() 
{
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('filesSheet');
  sh.clear();
  var folder=DriveApp.getFolderById('1axTLHOBPhl5_u7ngFOxViHg14OSw7pVC');//replace id with actual id of folder
  var files=folder.getFilesByType(MimeType.GOOGLE_SHEETS);
  var consol_sheet = SpreadsheetApp.openById('18JnkQYa1L-FhXFmKJBrqJ6GI7BBO-V8QAVKP8PLLoXo').getActiveSheet();
  var x=2;
  var z=0;
  var final_values = new Array(50000);

while(files.hasNext())
 {
   var file=files.next();
    var ts=SpreadsheetApp.openById(file.getId());
    var allShts=ts.getSheets();

       for(var i=0;i<3;i++)   //allShts.length   
       {  
            var consol_values = allShts[i].getRange(8,1,40,26).getValues();  //.getRange(8, 1, 1, 1).getValues();
            var headers = allShts[i].getRange(7,6,1,20).getValues();  //.getRange(8, 1, 1, 1).getValues();
            var position= allShts[i].getRange("B1").getValue();
            var period = allShts[i].getRange("B2").getValue();
            var email = allShts[i].getRange("B3").getValue();    

         for (var z = 0;z<20;z++)//
         {   

           for (var y= 0;y<40;y++)              
           {          
               if (consol_values[y][i] != "")
               {
              /*  consol_sheet.getRange(x,1).setValue(consol_values[y][0]);  //AI pack 
                consol_sheet.getRange(x,3).setValue(consol_values[y][1]); //measure
                consol_sheet.getRange(x,4).setValue(email);
                consol_sheet.getRange(x,5).setValue(position);     


                final_values[x] = [];
                final_values[x][0]  =consol_values[y][0];  //AI pack 
                 //blank
                final_values[x][2]  =(consol_values[y][1]); //measure
                final_values[x][3]  =(email);
                final_values[x][4]  =(position);     
                final_values[x][5]  =(headers[0][z]);//location
                final_values[x][6]  =1;
                final_values[x][7]  =(period);
                final_values[x][8]  =(consol_values[y][3]); //price
                final_values[x][9]  =(consol_values[y][z+5]); //fcst

                if (consol_values[y][z+5] != "")
                { 
                    final_values[x][10] =(consol_values[y][25]); //fcst value             
                }                          


                x = Number(x)+1  //row count for consolidation output

              }
          }          
         }    
      }
    }


consol_sheet.getRange(2,1,x,10).setValues(final_values);

 }

这个论坛一直非常有帮助,使我到这一点,现在我只是有一个障碍在这里完成这个项目。

EN

回答 3

Stack Overflow用户

发布于 2019-06-17 17:45:08

setValues的参数应该是数组数组(2D数组),其中所有内部数组都有相同数量的元素,而这些元素应该是字符串、数字或日期对象,不能有空元素。

注意:

如果你的数组看起来像这样

代码语言:javascript
复制
[
  [1,,'orange'], // 2nd element of this inner array is empty
  , // 2nd element of the outer array is empty
  [] // This array is empty
]

在每个内部数组的“空点”上添加缺失的内部数组和''。得到的数组应该如下所示:

代码语言:javascript
复制
[
  [1,'','orange'],
  ['','',''],
  ['','','']
]

(在每个空元素位置添加一个空字符串'' )。

相关

票数 3
EN

Stack Overflow用户

发布于 2019-06-17 17:45:38

将行和列写入电子表格

下面是一个简单的函数,它将行和列写入电子表格。

代码语言:javascript
复制
function writeRowColToSpreadsheet() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  sh.clear();
  var rg=sh.getRange(1,1,25,25);
  var vA=rg.getValues();
  for(var i=0;i<vA.length;i++) {
    for(var j=0;j<vA[i].length;j++) {
      vA[i][j]=Utilities.formatString('%s,%s', i+1,j+1);
    }
  }
  rg.setValues(vA);
}
票数 0
EN

Stack Overflow用户

发布于 2019-06-17 19:41:30

consol_values,您考虑过对原来的2d数组进行修改吗?这样你就会知道你的元素数量和你期望的一样多。您可以在0/1以外的地方启动循环,这取决于您想要忽略的原始值(在本例中,您的拉区与写入区域不完全相同)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56636115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档