我试图将我的数组写入电子表格,但我做了一些错误的事情。我读过许多帖子,上面写着要做我正在做的事情,但这是行不通的。请参阅下面最后一行代码
在最后一行代码中
‘’consol_sheet.getRange(2,1,x,10).setValues(Final_values);‘’我得到一个错误
“无法将数组转换为对象”
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);
}这个论坛一直非常有帮助,使我到这一点,现在我只是有一个障碍在这里完成这个项目。
发布于 2019-06-17 17:45:08
setValues的参数应该是数组数组(2D数组),其中所有内部数组都有相同数量的元素,而这些元素应该是字符串、数字或日期对象,不能有空元素。
注意:
如果你的数组看起来像这样
[
[1,,'orange'], // 2nd element of this inner array is empty
, // 2nd element of the outer array is empty
[] // This array is empty
]在每个内部数组的“空点”上添加缺失的内部数组和''。得到的数组应该如下所示:
[
[1,'','orange'],
['','',''],
['','','']
](在每个空元素位置添加一个空字符串'' )。
相关
发布于 2019-06-17 17:45:38
将行和列写入电子表格
下面是一个简单的函数,它将行和列写入电子表格。
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);
}发布于 2019-06-17 19:41:30
consol_values,您考虑过对原来的2d数组进行修改吗?这样你就会知道你的元素数量和你期望的一样多。您可以在0/1以外的地方启动循环,这取决于您想要忽略的原始值(在本例中,您的拉区与写入区域不完全相同)。
https://stackoverflow.com/questions/56636115
复制相似问题